From 8250fcdfda523815273faadddc4383d130ccc6b3 Mon Sep 17 00:00:00 2001 From: zhanjun Date: Sun, 21 Jan 2024 19:23:36 +0800 Subject: [PATCH 01/17] fix: update tool --- packages/libs/types/aspect-interface.ts | 147 ++++++++++-------- packages/libs/types/index.ts | 1 + packages/testcases/aspect/contract-aspect.ts | 39 +++++ packages/testcases/aspect/operation-aspect.ts | 4 + packages/testcases/aspect/test-aspect.ts | 50 ++++++ packages/testcases/project.config.json | 2 +- .../testcases/tests/contract-aspect.test.js | 53 +++++++ .../toolkit/src/tmpl/scripts/contract-call.ts | 12 +- .../src/tmpl/scripts/contract-deploy.ts | 8 +- .../toolkit/src/tmpl/scripts/contract-send.ts | 10 +- 10 files changed, 252 insertions(+), 74 deletions(-) create mode 100644 packages/testcases/aspect/contract-aspect.ts create mode 100644 packages/testcases/aspect/test-aspect.ts create mode 100644 packages/testcases/tests/contract-aspect.test.js diff --git a/packages/libs/types/aspect-interface.ts b/packages/libs/types/aspect-interface.ts index f27a0c7..eb9b08f 100644 --- a/packages/libs/types/aspect-interface.ts +++ b/packages/libs/types/aspect-interface.ts @@ -1,94 +1,111 @@ import { - OperationInput, - PostContractCallInput, - PostTxExecuteInput, - PreContractCallInput, - PreTxExecuteInput, - TxVerifyInput, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + TxVerifyInput, } from '../proto'; export interface IAspectBase { - /** - * isOwner is used to check whether the sender is the owner of the contract. - * - * @param sender the sender of the transaction, hex string format with 0x prefix. - * @returns true if the sender is the owner of the contract, otherwise false. - */ - isOwner(sender: Uint8Array): bool; + /** + * isOwner is used to check whether the sender is the owner of the contract. + * + * @param sender the sender of the transaction, hex string format with 0x prefix. + * @returns true if the sender is the owner of the contract, otherwise false. + */ + isOwner(sender: Uint8Array): bool; } export interface ITransactionVerifier extends IAspectBase { - /** - * verifyTx is used to verify the transaction. If the transaction is valid, - * an ethereum address will be returned. Otherwise, you can either call revert or return empty data - * to end the transaction. - * - * @param input the input for the transaction verification. - */ - verifyTx(input: TxVerifyInput): Uint8Array; + /** + * verifyTx is used to verify the transaction. If the transaction is valid, + * an ethereum address will be returned. Otherwise, you can either call revert or return empty data + * to end the transaction. + * + * @param input the input for the transaction verification. + */ + verifyTx(input: TxVerifyInput): Uint8Array; } export interface IPreTxExecuteJP extends IAspectBase { - /** - * preTxExecute will be triggered before the transaction is executed. - * - * @param input context information of current join point. - */ - preTxExecute(input: PreTxExecuteInput): void; + /** + * preTxExecute will be triggered before the transaction is executed. + * + * @param input context information of current join point. + */ + preTxExecute(input: PreTxExecuteInput): void; } export interface IPreContractCallJP extends IAspectBase { - /** - * preContractCall will be triggered before the contract call is executed. - * - * @param input context information of current join point. - */ - preContractCall(input: PreContractCallInput): void; + /** + * preContractCall will be triggered before the contract call is executed. + * + * @param input context information of current join point. + */ + preContractCall(input: PreContractCallInput): void; } export interface IPostContractCallJP extends IAspectBase { - /** - * postContractCall will be triggered after the contract call is executed. - * - * @param input context information of current join point. - */ - postContractCall(input: PostContractCallInput): void; + /** + * postContractCall will be triggered after the contract call is executed. + * + * @param input context information of current join point. + */ + postContractCall(input: PostContractCallInput): void; } export interface IPostTxExecuteJP extends IAspectBase { - /** - * postTxExecute will be triggered after the transaction is executed. - * - * @param input context information of current join point. - */ - postTxExecute(input: PostTxExecuteInput): void; + /** + * postTxExecute will be triggered after the transaction is executed. + * + * @param input context information of current join point. + */ + postTxExecute(input: PostTxExecuteInput): void; } -export interface IAspectOperation { - /** - * operation is used to execute the logics within the Aspect. - * - * @param input input data for the operation. - * @return the data of the operation output. - */ - operation(input: OperationInput): Uint8Array; +export interface IAspectOperation extends IAspectBase { + /** + * operation is used to execute the logics within the Aspect. + * + * @param input input data for the operation. + * @return the data of the operation output. + */ + operation(input: OperationInput): Uint8Array; +} + +export abstract class AspectBase implements IAspectBase, IAspectOperation, IPostTxExecuteJP, IPreTxExecuteJP, IPreContractCallJP, IPostContractCallJP, ITransactionVerifier { + abstract isOwner(sender: Uint8Array): bool; + + abstract operation(input: OperationInput): Uint8Array; + + abstract preTxExecute(input: PreTxExecuteInput): void; + + abstract postContractCall(input: PostContractCallInput): void; + + abstract preContractCall(input: PreContractCallInput): void; + + abstract postTxExecute(input: PostTxExecuteInput): void; + + abstract verifyTx(input: TxVerifyInput): Uint8Array; + } export class PointCutType { - static readonly ON_TX_RECEIVE_METHOD: string = 'onTxReceive'; - static readonly ON_BLOCK_INITIALIZE_METHOD: string = 'onBlockInitialize'; + static readonly ON_TX_RECEIVE_METHOD: string = 'onTxReceive'; + static readonly ON_BLOCK_INITIALIZE_METHOD: string = 'onBlockInitialize'; - static readonly VERIFY_TX: string = 'verifyTx'; + static readonly VERIFY_TX: string = 'verifyTx'; - static readonly PRE_TX_EXECUTE_METHOD: string = 'preTxExecute'; - static readonly PRE_CONTRACT_CALL_METHOD: string = 'preContractCall'; - static readonly POST_CONTRACT_CALL_METHOD: string = 'postContractCall'; - static readonly POST_TX_EXECUTE_METHOD: string = 'postTxExecute'; - static readonly POST_TX_COMMIT: string = 'postTxCommit'; - static readonly ON_BLOCK_FINALIZE_METHOD: string = 'onBlockFinalize'; + static readonly PRE_TX_EXECUTE_METHOD: string = 'preTxExecute'; + static readonly PRE_CONTRACT_CALL_METHOD: string = 'preContractCall'; + static readonly POST_CONTRACT_CALL_METHOD: string = 'postContractCall'; + static readonly POST_TX_EXECUTE_METHOD: string = 'postTxExecute'; + static readonly POST_TX_COMMIT: string = 'postTxCommit'; + static readonly ON_BLOCK_FINALIZE_METHOD: string = 'onBlockFinalize'; - static readonly OPERATION_METHOD: string = 'operation'; - static readonly IS_OWNER_METHOD: string = 'isOwner'; + static readonly OPERATION_METHOD: string = 'operation'; + static readonly IS_OWNER_METHOD: string = 'isOwner'; - static readonly FILTER_TX: string = 'filterTx'; + static readonly FILTER_TX: string = 'filterTx'; } diff --git a/packages/libs/types/index.ts b/packages/libs/types/index.ts index f50bbad..e4111db 100644 --- a/packages/libs/types/index.ts +++ b/packages/libs/types/index.ts @@ -7,6 +7,7 @@ export { IPreContractCallJP, IPreTxExecuteJP, IAspectBase, + AspectBase, } from './aspect-interface'; export { entryPoint, execute, allocate } from './entrance'; diff --git a/packages/testcases/aspect/contract-aspect.ts b/packages/testcases/aspect/contract-aspect.ts new file mode 100644 index 0000000..de5bab4 --- /dev/null +++ b/packages/testcases/aspect/contract-aspect.ts @@ -0,0 +1,39 @@ +import { + allocate, + entryPoint, + execute, + IPostTxExecuteJP, + IPreTxExecuteJP, + PostTxExecuteInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +class StoreAspect + implements IPostTxExecuteJP, IPreTxExecuteJP +{ + isOwner(sender: Uint8Array): bool { + return true + } + + preTxExecute(input: PreTxExecuteInput): void { + //for smart contract call + sys.aspect.transientStorage.get('ToContract').set('HelloWord'); + } + + postTxExecute(input: PostTxExecuteInput): void { + const to = uint8ArrayToHex(input.tx!.to); + const value = sys.aspect.transientStorage.get('ToAspect', to).unwrap(); + //'HelloAspect' here is set from smart contract + sys.require(value=="HelloAspect","failed to get value by contract setting."); + } + +} + +// 2.register aspect Instance +const aspect = new StoreAspect(); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/operation-aspect.ts b/packages/testcases/aspect/operation-aspect.ts index 5a3aa1a..acdf2ad 100644 --- a/packages/testcases/aspect/operation-aspect.ts +++ b/packages/testcases/aspect/operation-aspect.ts @@ -15,6 +15,10 @@ class AspectTest implements IAspectOperation { sys.require(input.callData.length > 0, 'data is lost'); return stringToUint8Array('test'); } + + isOwner(sender: Uint8Array): bool { + return true; + } } // 2.register aspect Instance diff --git a/packages/testcases/aspect/test-aspect.ts b/packages/testcases/aspect/test-aspect.ts new file mode 100644 index 0000000..5dcc2cd --- /dev/null +++ b/packages/testcases/aspect/test-aspect.ts @@ -0,0 +1,50 @@ +import { + allocate, AspectBase, + entryPoint, + execute, OperationInput, PostContractCallInput, + PostTxExecuteInput, PreContractCallInput, + PreTxExecuteInput, stringToUint8Array, + sys, TxVerifyInput, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +class StoreAspect extends AspectBase +{ + isOwner(sender: Uint8Array): bool { + return true + } + + preTxExecute(input: PreTxExecuteInput): void { + //for smart contract call + sys.aspect.transientStorage.get('ToContract').set('HelloWord'); + } + + postTxExecute(input: PostTxExecuteInput): void { + const to = uint8ArrayToHex(input.tx!.to); + const value = sys.aspect.transientStorage.get('ToAspect', to).unwrap(); + //'HelloAspect' here is set from smart contract + sys.require(value=="HelloAspect","failed to get value by contract setting."); + } + + operation(input: OperationInput): Uint8Array { + return stringToUint8Array('test'); + } + + postContractCall(input: PostContractCallInput): void { + } + + preContractCall(input: PreContractCallInput): void { + } + + verifyTx(input: TxVerifyInput): Uint8Array { + return stringToUint8Array('test'); + } + +} + +// 2.register aspect Instance +const aspect = new StoreAspect(); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/project.config.json b/packages/testcases/project.config.json index e94189a..a6d4187 100644 --- a/packages/testcases/project.config.json +++ b/packages/testcases/project.config.json @@ -1,3 +1,3 @@ { - "node": "https://betanet-rpc1.artela.network" + "node": "http://127.0.0.1:8545" } \ No newline at end of file diff --git a/packages/testcases/tests/contract-aspect.test.js b/packages/testcases/tests/contract-aspect.test.js new file mode 100644 index 0000000..b46feac --- /dev/null +++ b/packages/testcases/tests/contract-aspect.test.js @@ -0,0 +1,53 @@ +import {BindAspect, ContractCall, DeployAspect, DeployContract, SendTx} from "./bese-test.js"; +import assert from "assert"; + +const result = await DeployContract({ + abiPath: "../build/contract/Storage.abi", bytePath: "../build/contract/Storage.bin" +}) +assert.ok(result.contractAddress, "Deploy Storage Contract fail"); +console.log("==deploy Storage Contract Result== ", result) +// +// let dcResult = await DeployContract({ +// abiPath: "../build/contract/ScheduleTarget.abi", bytePath: "../build/contract/ScheduleTarget.bin" +// }) +// +// console.log("==deploy ScheduleTarget Contract Result== ", dcResult) + + +const aspect = await DeployAspect({ + wasmPath: "../build/contract-aspect.wasm", + joinPoints: ["PreTxExecute", "PostTxExecute"], + properties: [{'key': 'owner', 'value': result.from}], +}) +assert.ok(aspect.aspectAddress, "Deploy storage-aspect fail"); + +console.log("==deploy Aspect Result== ", aspect) + +const bindResult = await BindAspect({ + abiPath: "../build/contract/Storage.abi", + contractAddress: result.contractAddress, + aspectId: aspect.aspectAddress +}) +console.log("==bind Aspect Result== ", bindResult) + +// const getValue = await ContractCall({ +// contract: result.contractAddress, +// abiPath: "../build/contract/Storage.abi", +// method: "getAspectContext", +// args: [aspect.aspectAddress, "ToContract"] +// }); +// +// console.log("==== getAspectContext from aspect preTxExecute set ===" + getValue); +// assert.strictEqual(getValue, "HelloWord", "getAspectContext from aspect preTxExecute set fail") + + +const setValue = await ContractCall({ + contract: result.contractAddress, + abiPath: "../build/contract/Storage.abi", + method: "setAspectContext", + args: ["ToAspect", "HelloAspect"] +}); +console.log("==== setAspectContext for aspect postTxExecute ===" + setValue); + +assert.strictEqual(setValue, true, "setAspectContext from aspect postTxExecute set fail") + diff --git a/packages/toolkit/src/tmpl/scripts/contract-call.ts b/packages/toolkit/src/tmpl/scripts/contract-call.ts index 1767bb8..eecac2c 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-call.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-call.ts @@ -1,4 +1,5 @@ export const ContractCallTmpl = ` + "use strict" // import required libs @@ -7,10 +8,13 @@ const Web3 = require('@artela/web3'); var argv = require('yargs') .string('node') .string('skfile') - .string('args') + .array('args') .string('contract') .string('method') .string('abi') + .parserConfiguration({ + "parse-numbers": false, + }) .argv; @@ -59,7 +63,7 @@ async function call() { const inputs = argv.args; let parameters=[]; if(inputs && inputs!=='undefined') { - parameters = JSON.parse(inputs); + parameters =inputs; } //--method count const method = argv.method; @@ -67,11 +71,11 @@ async function call() { console.log("'method' cannot be empty, please set by the parameter ' --method {method-name}'") process.exit(0) } - let storageInstance = new web3.eth.Contract(abi, contractAddr); let instance = await storageInstance.methods[method](...parameters).call(); - console.log("==== reuslt===" + instance); + console.log("==== reuslt=== " + instance); } call().then(); + `; diff --git a/packages/toolkit/src/tmpl/scripts/contract-deploy.ts b/packages/toolkit/src/tmpl/scripts/contract-deploy.ts index c9c09a8..8841ae4 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-deploy.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-deploy.ts @@ -1,4 +1,5 @@ export const ContractDeployTmpl = ` + "use strict" // import required libs @@ -10,7 +11,10 @@ var argv = require('yargs') .string('bytecode') .string('abi') .string('gas') - .string('args') + .array('args') + .parserConfiguration({ + "parse-numbers": false, + }) .argv; @@ -49,7 +53,7 @@ async function deploy() { // --args [55] const inputs = argv.args; if (inputs && inputs !== 'undefined') { - deployParams.arguments = JSON.parse(inputs) + deployParams.arguments = inputs } //--abi ./build/contract/xxx.abi diff --git a/packages/toolkit/src/tmpl/scripts/contract-send.ts b/packages/toolkit/src/tmpl/scripts/contract-send.ts index 34970f2..cd5229b 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-send.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-send.ts @@ -1,4 +1,5 @@ export const ContractSendTmpl = ` + "use strict" // import required libs @@ -7,11 +8,14 @@ const Web3 = require('@artela/web3'); var argv = require('yargs') .string('node') .string('skfile') - .string('args') + .array('args') .string('contract') .string('gas') .string('method') .string('abi') + .parserConfiguration({ + "parse-numbers": false, + }) .argv; @@ -58,11 +62,12 @@ async function send() { console.log("'abi' cannot be empty, please set by the parameter' --abi xxx/xxx.abi'") process.exit(0) } + // --args [55] const inputs = argv.args; let parameters=[]; if(inputs && inputs!=='undefined') { - parameters = JSON.parse(inputs); + parameters =inputs; } //--method count const method = argv.method; @@ -90,4 +95,5 @@ async function send() { }); } send().then(); + `; From a9612e3b6ed66cf2e0335671c8c86f0a98c7eeed Mon Sep 17 00:00:00 2001 From: zhanjun Date: Mon, 22 Jan 2024 11:45:35 +0800 Subject: [PATCH 02/17] fix: update version --- packages/libs/package.json | 2 +- packages/libs/types/index.ts | 2 +- packages/toolkit/package.json | 2 +- packages/toolkit/src/commands/init.ts | 7 ++++--- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/packages/libs/package.json b/packages/libs/package.json index 4c65ed5..7712d7a 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-libs", - "version": "0.0.32", + "version": "0.0.33", "description": "AssemblyScript library for writing Artela Aspect", "main": "index.ts", "module": "index.ts", diff --git a/packages/libs/types/index.ts b/packages/libs/types/index.ts index e4111db..e228b8f 100644 --- a/packages/libs/types/index.ts +++ b/packages/libs/types/index.ts @@ -7,7 +7,7 @@ export { IPreContractCallJP, IPreTxExecuteJP, IAspectBase, - AspectBase, + AspectBase, } from './aspect-interface'; export { entryPoint, execute, allocate } from './entrance'; diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 8d1ad78..b396e0c 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-tool", - "version": "0.0.55", + "version": "0.0.56", "description": "Dev tool for aspect to generate libs from solidity storage layout.", "engines": { "node": ">=14" diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 425942e..3475a14 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -11,8 +11,8 @@ import { ContractDeployTmpl } from '../tmpl/scripts/contract-deploy'; import { ContractSendTmpl } from '../tmpl/scripts/contract-send'; import { CreateAccountTmpl } from '../tmpl/scripts/create-account'; -const toolVersion = '^0.0.55'; -const libVersion = '^0.0.32'; +const toolVersion = '^0.0.56'; +const libVersion = '^0.0.33'; const web3Version = '^1.9.22'; export default class Init extends Command { @@ -127,7 +127,8 @@ export default class Init extends Command { ensureGitIgnore(rootDir: string) { const tsconfigFile = path.join(rootDir, '.gitignore'); const tsconfigBase = 'node_modules\n' + - 'build\n'; + 'build\n'+ + '*.txt\n'; // this.log("- Making sure that 'tsconfigs.json' is set up..."); if (fs.existsSync(tsconfigFile)) { From 777c52729de2eae2a0569e2798bf265ce63935d5 Mon Sep 17 00:00:00 2001 From: zhanjun Date: Mon, 22 Jan 2024 11:57:41 +0800 Subject: [PATCH 03/17] fix: prettier format --- packages/libs/types/aspect-interface.ts | 154 +++++++++++++----------- 1 file changed, 81 insertions(+), 73 deletions(-) diff --git a/packages/libs/types/aspect-interface.ts b/packages/libs/types/aspect-interface.ts index eb9b08f..4891232 100644 --- a/packages/libs/types/aspect-interface.ts +++ b/packages/libs/types/aspect-interface.ts @@ -1,111 +1,119 @@ import { - OperationInput, - PostContractCallInput, - PostTxExecuteInput, - PreContractCallInput, - PreTxExecuteInput, - TxVerifyInput, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + TxVerifyInput, } from '../proto'; export interface IAspectBase { - /** - * isOwner is used to check whether the sender is the owner of the contract. - * - * @param sender the sender of the transaction, hex string format with 0x prefix. - * @returns true if the sender is the owner of the contract, otherwise false. - */ - isOwner(sender: Uint8Array): bool; + /** + * isOwner is used to check whether the sender is the owner of the contract. + * + * @param sender the sender of the transaction, hex string format with 0x prefix. + * @returns true if the sender is the owner of the contract, otherwise false. + */ + isOwner(sender: Uint8Array): bool; } export interface ITransactionVerifier extends IAspectBase { - /** - * verifyTx is used to verify the transaction. If the transaction is valid, - * an ethereum address will be returned. Otherwise, you can either call revert or return empty data - * to end the transaction. - * - * @param input the input for the transaction verification. - */ - verifyTx(input: TxVerifyInput): Uint8Array; + /** + * verifyTx is used to verify the transaction. If the transaction is valid, + * an ethereum address will be returned. Otherwise, you can either call revert or return empty data + * to end the transaction. + * + * @param input the input for the transaction verification. + */ + verifyTx(input: TxVerifyInput): Uint8Array; } export interface IPreTxExecuteJP extends IAspectBase { - /** - * preTxExecute will be triggered before the transaction is executed. - * - * @param input context information of current join point. - */ - preTxExecute(input: PreTxExecuteInput): void; + /** + * preTxExecute will be triggered before the transaction is executed. + * + * @param input context information of current join point. + */ + preTxExecute(input: PreTxExecuteInput): void; } export interface IPreContractCallJP extends IAspectBase { - /** - * preContractCall will be triggered before the contract call is executed. - * - * @param input context information of current join point. - */ - preContractCall(input: PreContractCallInput): void; + /** + * preContractCall will be triggered before the contract call is executed. + * + * @param input context information of current join point. + */ + preContractCall(input: PreContractCallInput): void; } export interface IPostContractCallJP extends IAspectBase { - /** - * postContractCall will be triggered after the contract call is executed. - * - * @param input context information of current join point. - */ - postContractCall(input: PostContractCallInput): void; + /** + * postContractCall will be triggered after the contract call is executed. + * + * @param input context information of current join point. + */ + postContractCall(input: PostContractCallInput): void; } export interface IPostTxExecuteJP extends IAspectBase { - /** - * postTxExecute will be triggered after the transaction is executed. - * - * @param input context information of current join point. - */ - postTxExecute(input: PostTxExecuteInput): void; + /** + * postTxExecute will be triggered after the transaction is executed. + * + * @param input context information of current join point. + */ + postTxExecute(input: PostTxExecuteInput): void; } export interface IAspectOperation extends IAspectBase { - /** - * operation is used to execute the logics within the Aspect. - * - * @param input input data for the operation. - * @return the data of the operation output. - */ - operation(input: OperationInput): Uint8Array; + /** + * operation is used to execute the logics within the Aspect. + * + * @param input input data for the operation. + * @return the data of the operation output. + */ + operation(input: OperationInput): Uint8Array; } -export abstract class AspectBase implements IAspectBase, IAspectOperation, IPostTxExecuteJP, IPreTxExecuteJP, IPreContractCallJP, IPostContractCallJP, ITransactionVerifier { - abstract isOwner(sender: Uint8Array): bool; +export abstract class AspectBase + implements + IAspectBase, + IAspectOperation, + IPostTxExecuteJP, + IPreTxExecuteJP, + IPreContractCallJP, + IPostContractCallJP, + ITransactionVerifier +{ + abstract isOwner(sender: Uint8Array): bool; - abstract operation(input: OperationInput): Uint8Array; + abstract operation(input: OperationInput): Uint8Array; - abstract preTxExecute(input: PreTxExecuteInput): void; + abstract preTxExecute(input: PreTxExecuteInput): void; - abstract postContractCall(input: PostContractCallInput): void; + abstract postContractCall(input: PostContractCallInput): void; - abstract preContractCall(input: PreContractCallInput): void; + abstract preContractCall(input: PreContractCallInput): void; - abstract postTxExecute(input: PostTxExecuteInput): void; - - abstract verifyTx(input: TxVerifyInput): Uint8Array; + abstract postTxExecute(input: PostTxExecuteInput): void; + abstract verifyTx(input: TxVerifyInput): Uint8Array; } export class PointCutType { - static readonly ON_TX_RECEIVE_METHOD: string = 'onTxReceive'; - static readonly ON_BLOCK_INITIALIZE_METHOD: string = 'onBlockInitialize'; + static readonly ON_TX_RECEIVE_METHOD: string = 'onTxReceive'; + static readonly ON_BLOCK_INITIALIZE_METHOD: string = 'onBlockInitialize'; - static readonly VERIFY_TX: string = 'verifyTx'; + static readonly VERIFY_TX: string = 'verifyTx'; - static readonly PRE_TX_EXECUTE_METHOD: string = 'preTxExecute'; - static readonly PRE_CONTRACT_CALL_METHOD: string = 'preContractCall'; - static readonly POST_CONTRACT_CALL_METHOD: string = 'postContractCall'; - static readonly POST_TX_EXECUTE_METHOD: string = 'postTxExecute'; - static readonly POST_TX_COMMIT: string = 'postTxCommit'; - static readonly ON_BLOCK_FINALIZE_METHOD: string = 'onBlockFinalize'; + static readonly PRE_TX_EXECUTE_METHOD: string = 'preTxExecute'; + static readonly PRE_CONTRACT_CALL_METHOD: string = 'preContractCall'; + static readonly POST_CONTRACT_CALL_METHOD: string = 'postContractCall'; + static readonly POST_TX_EXECUTE_METHOD: string = 'postTxExecute'; + static readonly POST_TX_COMMIT: string = 'postTxCommit'; + static readonly ON_BLOCK_FINALIZE_METHOD: string = 'onBlockFinalize'; - static readonly OPERATION_METHOD: string = 'operation'; - static readonly IS_OWNER_METHOD: string = 'isOwner'; + static readonly OPERATION_METHOD: string = 'operation'; + static readonly IS_OWNER_METHOD: string = 'isOwner'; - static readonly FILTER_TX: string = 'filterTx'; + static readonly FILTER_TX: string = 'filterTx'; } From d16f1cf94948d5b52a60126f018619ce4254d634 Mon Sep 17 00:00:00 2001 From: zhanjun Date: Wed, 24 Jan 2024 11:35:28 +0800 Subject: [PATCH 04/17] fix: add more commands --- packages/toolkit/package.json | 2 +- packages/toolkit/src/commands/init.ts | 53 ++++++++++++ .../src/tmpl/scripts/get-bound-account.ts | 55 ++++++++++++ .../src/tmpl/scripts/get-bound-aspect.ts | 50 +++++++++++ .../toolkit/src/tmpl/scripts/operation.ts | 86 +++++++++++++++++++ packages/toolkit/src/tmpl/scripts/unbind.ts | 79 +++++++++++++++++ 6 files changed, 324 insertions(+), 1 deletion(-) create mode 100644 packages/toolkit/src/tmpl/scripts/get-bound-account.ts create mode 100644 packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts create mode 100644 packages/toolkit/src/tmpl/scripts/operation.ts create mode 100644 packages/toolkit/src/tmpl/scripts/unbind.ts diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index b396e0c..3da9e55 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-tool", - "version": "0.0.56", + "version": "0.0.57", "description": "Dev tool for aspect to generate libs from solidity storage layout.", "engines": { "node": ">=14" diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 3475a14..fb9d07b 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -10,6 +10,10 @@ import { ContractCallTmpl } from '../tmpl/scripts/contract-call'; import { ContractDeployTmpl } from '../tmpl/scripts/contract-deploy'; import { ContractSendTmpl } from '../tmpl/scripts/contract-send'; import { CreateAccountTmpl } from '../tmpl/scripts/create-account'; +import { BoundAddressesOfTmpl } from '../tmpl/scripts/get-bound-account'; +import { AspectsOfTmpl } from '../tmpl/scripts/get-bound-aspect'; +import { OperationCallTmpl } from '../tmpl/scripts/operation'; +import { UnbindTmpl } from '../tmpl/scripts/unbind'; const toolVersion = '^0.0.56'; const libVersion = '^0.0.33'; @@ -235,6 +239,22 @@ export default class Init extends Command { if (!fs.existsSync(createAccount)) { fs.writeFileSync(createAccount, CreateAccountTmpl); } + const getBoundAccount = path.join(scriptDir, 'get-bound-account.cjs'); + if (!fs.existsSync(getBoundAccount)) { + fs.writeFileSync(getBoundAccount, BoundAddressesOfTmpl); + } + const getAspect = path.join(scriptDir, 'get-bound-aspect.cjs'); + if (!fs.existsSync(getAspect)) { + fs.writeFileSync(getAspect, AspectsOfTmpl); + } + const operation = path.join(scriptDir, 'operation.cjs'); + if (!fs.existsSync(operation)) { + fs.writeFileSync(operation, OperationCallTmpl); + } + const unbind = path.join(scriptDir, 'unbind.cjs'); + if (!fs.existsSync(unbind)) { + fs.writeFileSync(unbind, UnbindTmpl); + } } ensurePackageJson(dir: string) { @@ -275,6 +295,32 @@ export default class Init extends Command { pkg['scripts'] = scripts; updated = true; } + if (!scripts['contract:unbind']) { + scripts['contract:unbind'] = 'node scripts/unbind.cjs'; + pkg['scripts'] = scripts; + updated = true; + } + if (!scripts['operation:call']) { + scripts['operation:call'] = 'node scripts/operation.cjs --isCall true'; + pkg['scripts'] = scripts; + updated = true; + } + if (!scripts['operation:send']) { + scripts['operation:send'] = 'node scripts/operation.cjs --isCall false'; + pkg['scripts'] = scripts; + updated = true; + } + if (!scripts['bound:aspect']) { + scripts['bound:aspect'] = 'node scripts/get-bound-aspect.cjs'; + pkg['scripts'] = scripts; + updated = true; + } + if (!scripts['bound:account']) { + scripts['bound:account'] = 'node scripts/get-bound-account.cjs'; + pkg['scripts'] = scripts; + updated = true; + } + if (!scripts['contract:deploy']) { scripts['contract:deploy'] = 'node scripts/contract-deploy.cjs'; pkg['scripts'] = scripts; @@ -307,6 +353,7 @@ export default class Init extends Command { pkg['scripts'] = scripts; updated = true; } + if (!scripts['build']) { scripts['build'] = 'npm run contract:build && npm run aspect:build'; pkg['scripts'] = scripts; @@ -317,6 +364,7 @@ export default class Init extends Command { pkg['scripts'] = scripts; updated = true; } + const devDependencies = pkg['devDependencies'] || {}; if (!devDependencies['assemblyscript']) { devDependencies['assemblyscript'] = '^0.27.23'; @@ -382,7 +430,12 @@ export default class Init extends Command { 'aspect:gen': 'aspect-tool generate -i ./build/contract -o ./aspect/contract', 'asbuild:debug': 'asc aspect/index.ts --target debug', 'asbuild:release': 'asc aspect/index.ts --target release', + "operation:call": "node scripts/operation.cjs --isCall true", + "operation:send": "node scripts/operation.cjs --isCall false", + "bound:aspect": "node scripts/get-bound-aspect.cjs", + "bound:account": "node scripts/get-bound-account.cjs", 'contract:bind': 'node scripts/bind.cjs', + "contract:unbind": "node scripts/unbind.cjs", 'contract:deploy': 'node scripts/contract-deploy.cjs', 'contract:build': 'solc -o ./build/contract/ --via-ir --abi --storage-layout --bin ./contracts/*.sol --overwrite', diff --git a/packages/toolkit/src/tmpl/scripts/get-bound-account.ts b/packages/toolkit/src/tmpl/scripts/get-bound-account.ts new file mode 100644 index 0000000..80cf36f --- /dev/null +++ b/packages/toolkit/src/tmpl/scripts/get-bound-account.ts @@ -0,0 +1,55 @@ +export const BoundAddressesOfTmpl = ` + +"use strict" +const Web3 = require("@artela/web3"); +const fs = require("fs"); +var argv = require('yargs') + .string('node') + .string('skfile') + .string('aspectId') + .string('gas') + .argv; + +async function boundAddressesOf() { + // init connection to Artela node + const configJson = JSON.parse(fs.readFileSync('./project.config.json', "utf-8").toString()); + + let node = (argv.node) ? String(argv.node) : configJson.node; + if (!node) { + console.log("'node' cannot be empty, please set by the parameter or project.config.json") + process.exit(0) + } + const web3 = new Web3(node); + let gasPrice = await web3.eth.getGasPrice(); + + + //--skfile ./build/privateKey.txt + let senderPriKey = String(argv.skfile) + if (!senderPriKey || senderPriKey === 'undefined') { + senderPriKey = "privateKey.txt" + } + if (!fs.existsSync(senderPriKey)) { + console.log("'account' cannot be empty, please set by the parameter ' --skfile ./build/privateKey.txt'") + process.exit(0) + } + let pk = fs.readFileSync(senderPriKey, 'utf-8'); + let sender = web3.eth.accounts.privateKeyToAccount(pk.trim()); + web3.eth.accounts.wallet.add(sender.privateKey); + + + // --aspectId {aspect-Id} + let aspectId = String(argv.aspectId) + if (!aspectId || aspectId === 'undefined') { + console.log("'aspectId' cannot be empty, please set by the parameter' --aspectId 0xxxx'") + process.exit(0) + } + + const aspectContract = new web3.atl.aspectCore(); + + let boundAddresses= await aspectContract.methods["boundAddressesOf"](aspectId).call() + console.log("bound accounts: " + boundAddresses); +} + +boundAddressesOf().then(); + +`; \ No newline at end of file diff --git a/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts b/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts new file mode 100644 index 0000000..5fa0411 --- /dev/null +++ b/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts @@ -0,0 +1,50 @@ +export const AspectsOfTmpl = ` + +"use strict" +const Web3 = require("@artela/web3"); +const fs = require("fs"); +var argv = require('yargs') + .string('node') + .string('skfile') + .string('contract') + .argv; + +async function aspectsOf() { + // init connection to Artela node + const configJson = JSON.parse(fs.readFileSync('./project.config.json', "utf-8").toString()); + + let node = (argv.node) ? String(argv.node) : configJson.node; + if (!node) { + console.log("'node' cannot be empty, please set by the parameter or project.config.json") + process.exit(0) + } + const web3 = new Web3(node); + + //--skfile ./build/privateKey.txt + let senderPriKey = String(argv.skfile) + if (!senderPriKey || senderPriKey === 'undefined') { + senderPriKey = "privateKey.txt" + } + if (!fs.existsSync(senderPriKey)) { + console.log("'account' cannot be empty, please set by the parameter ' --skfile ./build/privateKey.txt'") + process.exit(0) + } + let pk = fs.readFileSync(senderPriKey, 'utf-8'); + let sender = web3.eth.accounts.privateKeyToAccount(pk.trim()); + web3.eth.accounts.wallet.add(sender.privateKey); + + + // --contract {smart-contract-address} + let contractAddress = String(argv.contract) + if (!contractAddress || contractAddress === 'undefined') { + console.log("'contractAddress' cannot be empty, please set by the parameter ' --contract 0xxxx'") + process.exit(0) + } + + const aspectContract = new web3.atl.aspectCore(); + let boundAddresses= await aspectContract.methods["aspectsOf"](contractAddress).call() + console.log("bound aspects : " + boundAddresses); +} + +aspectsOf().then(); +`; \ No newline at end of file diff --git a/packages/toolkit/src/tmpl/scripts/operation.ts b/packages/toolkit/src/tmpl/scripts/operation.ts new file mode 100644 index 0000000..8e9f347 --- /dev/null +++ b/packages/toolkit/src/tmpl/scripts/operation.ts @@ -0,0 +1,86 @@ +export const OperationCallTmpl = ` +"use strict" +const Web3 = require("@artela/web3"); +const fs = require("fs"); +var argv = require('yargs') + .string('node') + .string('skfile') + .string('callData') + .string('aspectId') + .boolean('isCall') + .string('gas') + .argv; + +async function operationCall() { + // init connection to Artela node + const configJson = JSON.parse(fs.readFileSync('./project.config.json', "utf-8").toString()); + + let node = (argv.node) ? String(argv.node) : configJson.node; + if (!node) { + console.log("'node' cannot be empty, please set by the parameter or project.config.json") + process.exit(0) + } + const web3 = new Web3(node); + let gasPrice = await web3.eth.getGasPrice(); + + + //--skfile ./build/privateKey.txt + let senderPriKey = String(argv.skfile) + if (!senderPriKey || senderPriKey === 'undefined') { + senderPriKey = "privateKey.txt" + } + if (!fs.existsSync(senderPriKey)) { + console.log("'account' cannot be empty, please set by the parameter ' --skfile ./build/privateKey.txt'") + process.exit(0) + } + let pk = fs.readFileSync(senderPriKey, 'utf-8'); + let sender = web3.eth.accounts.privateKeyToAccount(pk.trim()); + web3.eth.accounts.wallet.add(sender.privateKey); + + // --callData {smart-contract-address} + let callData = String(argv.callData) + if (!callData || callData === 'undefined') { + console.log("'callData' cannot be empty, please set by the parameter ' --callData 0xxxx'") + process.exit(0) + } + + // --aspectId {aspect-Id} + let aspectId = String(argv.aspectId) + if (!aspectId || aspectId === 'undefined') { + console.log("'aspectId' cannot be empty, please set by the parameter' --aspectId 0xxxx'") + process.exit(0) + } + + const aspectContract = new web3.atl.aspectCore(); + + const aspectInstance = new web3.atl.Aspect(aspectId); + + const encodeABI = aspectInstance.operation(callData).encodeABI(); + + const tx = { + from: sender.address, + to: aspectContract.options.address, + data: encodeABI, + gasPrice, + gas: 900_000 + } + const isCall = argv.isCall + + const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); + if (isCall) { + let callResult = await web3.eth.call({ + to: aspectContract.options.address, + data: encodeABI + }); + const rest = web3.eth.abi.decodeParameter('string', callResult); + console.log('operation call result: ' + rest); + } else { + await web3.eth.sendSignedTransaction(signedTx.rawTransaction) + .on('receipt', receipt => { + console.log(receipt); + }); + } +} + +operationCall().then(); +`; \ No newline at end of file diff --git a/packages/toolkit/src/tmpl/scripts/unbind.ts b/packages/toolkit/src/tmpl/scripts/unbind.ts new file mode 100644 index 0000000..a1476cd --- /dev/null +++ b/packages/toolkit/src/tmpl/scripts/unbind.ts @@ -0,0 +1,79 @@ +export const UnbindTmpl = ` + +"use strict" +const Web3 = require("@artela/web3"); +const fs = require("fs"); +var argv = require('yargs') + .string('node') + .string('skfile') + .string('contract') + .string('aspectId') + .string('gas') + .argv; + +async function unbind() { + // init connection to Artela node + const configJson = JSON.parse(fs.readFileSync('./project.config.json', "utf-8").toString()); + + let node = (argv.node) ? String(argv.node) : configJson.node; + if (!node) { + console.log("'node' cannot be empty, please set by the parameter or project.config.json") + process.exit(0) + } + const web3 = new Web3(node); + let gasPrice = await web3.eth.getGasPrice(); + + + //--skfile ./build/privateKey.txt + let senderPriKey = String(argv.skfile) + if (!senderPriKey || senderPriKey === 'undefined') { + senderPriKey = "privateKey.txt" + } + if (!fs.existsSync(senderPriKey)) { + console.log("'account' cannot be empty, please set by the parameter ' --skfile ./build/privateKey.txt'") + process.exit(0) + } + let pk = fs.readFileSync(senderPriKey, 'utf-8'); + let sender = web3.eth.accounts.privateKeyToAccount(pk.trim()); + web3.eth.accounts.wallet.add(sender.privateKey); + + // --contract {smart-contract-address} + let contractAddress = String(argv.contract) + if (!contractAddress || contractAddress === 'undefined') { + console.log("'contractAddress' cannot be empty, please set by the parameter ' --contract 0xxxx'") + process.exit(0) + } + + // --aspectId {aspect-Id} + let aspectId = String(argv.aspectId) + if (!aspectId || aspectId === 'undefined') { + console.log("'aspectId' cannot be empty, please set by the parameter' --aspectId 0xxxx'") + process.exit(0) + } + + const aspectContract = new web3.atl.aspectCore(); + // bind the smart contract with aspect + const unbind = await aspectContract.methods.unbind( + aspectId, + contractAddress + ) + + const tx = { + from: sender.address, + data: unbind.encodeABI(), + gasPrice, + to: aspectContract.options.address, + gas: !parseInt(argv.gas) | 9000000 + } + + const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); + await web3.eth.sendSignedTransaction(signedTx.rawTransaction) + .on('receipt', receipt => { + console.log(receipt); + }); + console.log("== aspect unbind success =="); + +} + +unbind().then(); +`; \ No newline at end of file From 5e006f89bb874491c7a8018e6b2afe53aaa3e40f Mon Sep 17 00:00:00 2001 From: zhanjun Date: Wed, 24 Jan 2024 11:40:26 +0800 Subject: [PATCH 05/17] fix: update version --- packages/toolkit/src/commands/init.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index fb9d07b..0318a20 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -15,7 +15,7 @@ import { AspectsOfTmpl } from '../tmpl/scripts/get-bound-aspect'; import { OperationCallTmpl } from '../tmpl/scripts/operation'; import { UnbindTmpl } from '../tmpl/scripts/unbind'; -const toolVersion = '^0.0.56'; +const toolVersion = '^0.0.57'; const libVersion = '^0.0.33'; const web3Version = '^1.9.22'; From 6038688bb625bfdc20ee8e306a895e12f8a35d3d Mon Sep 17 00:00:00 2001 From: zhanjun Date: Thu, 22 Feb 2024 14:42:12 +0800 Subject: [PATCH 06/17] fix: for windows error --- packages/testcases/aspect/operation-aspect.ts | 43 +++++++++------ .../testcases/tests/operation-aspect.test.js | 21 ++++++++ packages/toolkit/src/commands/generate.ts | 10 +++- packages/toolkit/src/commands/init.ts | 53 ++++++++++++------- .../src/tmpl/scripts/get-bound-account.ts | 2 +- .../src/tmpl/scripts/get-bound-aspect.ts | 2 +- .../toolkit/src/tmpl/scripts/operation.ts | 2 +- packages/toolkit/src/tmpl/scripts/unbind.ts | 2 +- 8 files changed, 95 insertions(+), 40 deletions(-) diff --git a/packages/testcases/aspect/operation-aspect.ts b/packages/testcases/aspect/operation-aspect.ts index acdf2ad..28196fb 100644 --- a/packages/testcases/aspect/operation-aspect.ts +++ b/packages/testcases/aspect/operation-aspect.ts @@ -1,24 +1,35 @@ // The entry file of your WebAssembly module. import { - allocate, - entryPoint, - execute, - IAspectOperation, - OperationInput, - stringToUint8Array, - sys, + allocate, BigInt, + entryPoint, + execute, + IAspectOperation, + OperationInput, + stringToUint8Array, + sys, } from '@artela/aspect-libs'; class AspectTest implements IAspectOperation { - operation(input: OperationInput): Uint8Array { - sys.require(input.callData.length > 0, 'data is lost'); - return stringToUint8Array('test'); - } - - isOwner(sender: Uint8Array): bool { - return true; - } + operation(input: OperationInput): Uint8Array { + + const num = sys.aspect.property.get("num"); + sys.log("||| num = " + num.toString(10)); + + sys.require(input.callData.length > 0, 'data is lost'); + + const hash = input.tx!.hash; + const subHash = hash.slice(0,8); + const seed = BigInt.fromUint8ArrayWithSign(subHash).toInt64(); + Math.seedRandom(seed); + const random = Math.random(); + + return stringToUint8Array(random.toString()); + } + + isOwner(sender: Uint8Array): bool { + return true; + } } // 2.register aspect Instance @@ -26,4 +37,4 @@ const aspect = new AspectTest(); entryPoint.setOperationAspect(aspect); // 3.must export it -export { execute, allocate }; +export {execute, allocate}; diff --git a/packages/testcases/tests/operation-aspect.test.js b/packages/testcases/tests/operation-aspect.test.js index ea482ad..6992371 100644 --- a/packages/testcases/tests/operation-aspect.test.js +++ b/packages/testcases/tests/operation-aspect.test.js @@ -2,8 +2,29 @@ import {ConnectToANode, DeployAspect, EntryPoint} from "./bese-test.js"; import assert from "assert"; +//将数值写入到视图中,获得其字节数组,大端字节序 +function getUint8Array(len, setNum) { + var buffer = new ArrayBuffer(len); //指定字节长度 + setNum(new DataView(buffer)); //根据不同的类型调用不同的函数来写入数值 + return new Uint8Array(buffer); //创建一个字节数组,从缓存中拿取数据 +} +//得到一个8位有符号整型的字节数组,大端字节序 +function getInt8Bytes(num) { + return getUint8Array(1, function (view) { view.setInt8(0, num); }) +} +//得到一个8位无符号整型的字节数组,大端字节序 +function getUint8Bytes(num) { + return getUint8Array(1, function (view) { view.setUint8(0, num); }) +} +//得到一个16位有符号整型的字节数组,大端字节序 +function getInt16Bytes(num) { + return getUint8Array(2, function (view) { view.setInt16(0, num); }) +} + const aspect = await DeployAspect({ wasmPath: "../build/operation-aspect.wasm", + properties: [{'key': 'num', 'value':getInt16Bytes(100)} ], + }) console.log("==deploy Aspect Result== ", aspect) diff --git a/packages/toolkit/src/commands/generate.ts b/packages/toolkit/src/commands/generate.ts index 3e70a8f..92b6383 100644 --- a/packages/toolkit/src/commands/generate.ts +++ b/packages/toolkit/src/commands/generate.ts @@ -65,12 +65,20 @@ export default class Generate extends Command { this.log('Illegal input!'); process.exit(0); } else { + const parentFolderPath = path.dirname(targetFilePath); + if (!fs.existsSync(parentFolderPath)) { + fs.mkdirSync(parentFolderPath, { recursive: true }); + } inputAndOutputs.push([sourceFilePath, targetFilePath]); } } else if ( fs.statSync(sourceFilePath).isDirectory() && - fs.statSync(targetFilePath).isDirectory() + (!fs.existsSync(targetFilePath) || fs.statSync(targetFilePath).isDirectory()) ) { + if (!fs.existsSync(targetFilePath)) { + fs.mkdirSync(targetFilePath, { recursive: true }); + } + for (const file of fs.readdirSync(sourceFilePath)) { if (!file.endsWith('_storage.json')) { continue; diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 0318a20..7420fd0 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -15,6 +15,8 @@ import { AspectsOfTmpl } from '../tmpl/scripts/get-bound-aspect'; import { OperationCallTmpl } from '../tmpl/scripts/operation'; import { UnbindTmpl } from '../tmpl/scripts/unbind'; +const isWinOS = /^win/i.test(process.platform); + const toolVersion = '^0.0.57'; const libVersion = '^0.0.33'; const web3Version = '^1.9.22'; @@ -52,6 +54,14 @@ export default class Init extends Command { } } + warpOsPath(dir: string) { + if (isWinOS) { + return dir.replace(/\\/g, '/'); + } else { + return dir; + } + } + ensureTestsDirectory(dir: string) { const projectDir = path.resolve(dir); const testDir = path.join(projectDir, 'tests'); @@ -128,27 +138,21 @@ export default class Init extends Command { this.log(' Created: ' + projectConfig); } } + ensureGitIgnore(rootDir: string) { const tsconfigFile = path.join(rootDir, '.gitignore'); - const tsconfigBase = 'node_modules\n' + - 'build\n'+ - '*.txt\n'; + const tsconfigBase = 'node_modules\n' + 'build\n' + '*.txt\n'; // this.log("- Making sure that 'tsconfigs.json' is set up..."); if (fs.existsSync(tsconfigFile)) { - } else { - fs.writeFileSync( - tsconfigFile, - tsconfigBase, - ); + fs.writeFileSync(tsconfigFile, tsconfigBase); this.log(' Created: ' + tsconfigFile); } } - ensureTsconfigJson(rootDir: string) { - const tsconfigFile = path.join(rootDir+"/aspect/", 'tsconfig.json'); + const tsconfigFile = path.join(rootDir + '/aspect/', 'tsconfig.json'); const tsconfigBase = 'assemblyscript/std/assembly.json'; // this.log("- Making sure that 'tsconfig.json' is set up..."); @@ -163,7 +167,7 @@ export default class Init extends Command { JSON.stringify( { extends: tsconfigBase, - include: ["./**/*.ts"], + include: ['./**/*.ts'], }, null, 2, @@ -276,6 +280,7 @@ export default class Init extends Command { types: './build/release.d.ts', }, }; + if (!scripts['aspect:build']) { scripts['asbuild:debug'] = 'asc aspect/index.ts --target debug'; scripts['asbuild:release'] = 'asc aspect/index.ts --target release'; @@ -348,8 +353,13 @@ export default class Init extends Command { updated = true; } if (!scripts['contract:build']) { - scripts['contract:build'] = + let cmd = 'solc -o ./build/contract/ --abi --storage-layout --bin ./contracts/*.sol --overwrite'; + if (isWinOS) { + cmd = + 'for %f in (./contracts/*.sol) do solc -o ./build/contract --via-ir --abi --storage-layout --bin ./contracts/%f --overwrite'; + } + scripts['contract:build'] = cmd; pkg['scripts'] = scripts; updated = true; } @@ -415,6 +425,12 @@ export default class Init extends Command { this.log(' Exists: ' + packageFile); } } else { + let buildCmd = + 'solc -o ./build/contract/ --abi --storage-layout --bin ./contracts/*.sol --overwrite'; + if (isWinOS) { + buildCmd = + 'for %f in (./contracts/*.sol) do solc -o ./build/contract --via-ir --abi --storage-layout --bin ./contracts/%f --overwrite'; + } fs.writeFileSync( packageFile, JSON.stringify( @@ -430,15 +446,14 @@ export default class Init extends Command { 'aspect:gen': 'aspect-tool generate -i ./build/contract -o ./aspect/contract', 'asbuild:debug': 'asc aspect/index.ts --target debug', 'asbuild:release': 'asc aspect/index.ts --target release', - "operation:call": "node scripts/operation.cjs --isCall true", - "operation:send": "node scripts/operation.cjs --isCall false", - "bound:aspect": "node scripts/get-bound-aspect.cjs", - "bound:account": "node scripts/get-bound-account.cjs", + 'operation:call': 'node scripts/operation.cjs --isCall true', + 'operation:send': 'node scripts/operation.cjs --isCall false', + 'bound:aspect': 'node scripts/get-bound-aspect.cjs', + 'bound:account': 'node scripts/get-bound-account.cjs', 'contract:bind': 'node scripts/bind.cjs', - "contract:unbind": "node scripts/unbind.cjs", + 'contract:unbind': 'node scripts/unbind.cjs', 'contract:deploy': 'node scripts/contract-deploy.cjs', - 'contract:build': - 'solc -o ./build/contract/ --via-ir --abi --storage-layout --bin ./contracts/*.sol --overwrite', + 'contract:build': buildCmd, build: 'npm run contract:build && npm run aspect:gen && npm run aspect:build', }, keywords: [], diff --git a/packages/toolkit/src/tmpl/scripts/get-bound-account.ts b/packages/toolkit/src/tmpl/scripts/get-bound-account.ts index 80cf36f..05235ab 100644 --- a/packages/toolkit/src/tmpl/scripts/get-bound-account.ts +++ b/packages/toolkit/src/tmpl/scripts/get-bound-account.ts @@ -52,4 +52,4 @@ async function boundAddressesOf() { boundAddressesOf().then(); -`; \ No newline at end of file +`; diff --git a/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts b/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts index 5fa0411..ac03233 100644 --- a/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts +++ b/packages/toolkit/src/tmpl/scripts/get-bound-aspect.ts @@ -47,4 +47,4 @@ async function aspectsOf() { } aspectsOf().then(); -`; \ No newline at end of file +`; diff --git a/packages/toolkit/src/tmpl/scripts/operation.ts b/packages/toolkit/src/tmpl/scripts/operation.ts index 8e9f347..476d60b 100644 --- a/packages/toolkit/src/tmpl/scripts/operation.ts +++ b/packages/toolkit/src/tmpl/scripts/operation.ts @@ -83,4 +83,4 @@ async function operationCall() { } operationCall().then(); -`; \ No newline at end of file +`; diff --git a/packages/toolkit/src/tmpl/scripts/unbind.ts b/packages/toolkit/src/tmpl/scripts/unbind.ts index a1476cd..09db0c7 100644 --- a/packages/toolkit/src/tmpl/scripts/unbind.ts +++ b/packages/toolkit/src/tmpl/scripts/unbind.ts @@ -76,4 +76,4 @@ async function unbind() { } unbind().then(); -`; \ No newline at end of file +`; From 77e6e946745e79a76892cba09f981ad8350b8791 Mon Sep 17 00:00:00 2001 From: zhanjun Date: Thu, 22 Feb 2024 14:43:41 +0800 Subject: [PATCH 07/17] fix: update version --- packages/libs/package.json | 2 +- packages/toolkit/package.json | 2 +- packages/toolkit/src/commands/init.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/libs/package.json b/packages/libs/package.json index 7712d7a..69e1788 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-libs", - "version": "0.0.33", + "version": "0.0.34", "description": "AssemblyScript library for writing Artela Aspect", "main": "index.ts", "module": "index.ts", diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 3da9e55..c0adde1 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-tool", - "version": "0.0.57", + "version": "0.0.58", "description": "Dev tool for aspect to generate libs from solidity storage layout.", "engines": { "node": ">=14" diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 7420fd0..20b76f2 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -17,8 +17,8 @@ import { UnbindTmpl } from '../tmpl/scripts/unbind'; const isWinOS = /^win/i.test(process.platform); -const toolVersion = '^0.0.57'; -const libVersion = '^0.0.33'; +const toolVersion = '^0.0.58'; +const libVersion = '^0.0.34'; const web3Version = '^1.9.22'; export default class Init extends Command { From 17ff4a75cbf14d5782498f8dc9a855fdf8b80134 Mon Sep 17 00:00:00 2001 From: zhanjun Date: Thu, 22 Feb 2024 14:44:36 +0800 Subject: [PATCH 08/17] fix: update version --- packages/libs/package.json | 2 +- packages/toolkit/src/commands/init.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/libs/package.json b/packages/libs/package.json index 69e1788..7712d7a 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-libs", - "version": "0.0.34", + "version": "0.0.33", "description": "AssemblyScript library for writing Artela Aspect", "main": "index.ts", "module": "index.ts", diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 20b76f2..5b19888 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -18,7 +18,7 @@ import { UnbindTmpl } from '../tmpl/scripts/unbind'; const isWinOS = /^win/i.test(process.platform); const toolVersion = '^0.0.58'; -const libVersion = '^0.0.34'; +const libVersion = '^0.0.33'; const web3Version = '^1.9.22'; export default class Init extends Command { From cac3b088594eac6e6e4cef6a1909d32d96926790 Mon Sep 17 00:00:00 2001 From: zhanjun Date: Thu, 22 Feb 2024 14:50:59 +0800 Subject: [PATCH 09/17] fix: update version --- packages/testcases/tests/operation-aspect.test.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/testcases/tests/operation-aspect.test.js b/packages/testcases/tests/operation-aspect.test.js index 6992371..bff95b0 100644 --- a/packages/testcases/tests/operation-aspect.test.js +++ b/packages/testcases/tests/operation-aspect.test.js @@ -2,21 +2,21 @@ import {ConnectToANode, DeployAspect, EntryPoint} from "./bese-test.js"; import assert from "assert"; -//将数值写入到视图中,获得其字节数组,大端字节序 +//Write the numeric value into the view to get its byte array, big-endian endian function getUint8Array(len, setNum) { - var buffer = new ArrayBuffer(len); //指定字节长度 - setNum(new DataView(buffer)); //根据不同的类型调用不同的函数来写入数值 - return new Uint8Array(buffer); //创建一个字节数组,从缓存中拿取数据 + var buffer = new ArrayBuffer(len); //specify the byte length + setNum(new DataView(buffer)); //Depending on the type, different functions are called to write values + return new Uint8Array(buffer); //create a byte array to fetch data from the cache } -//得到一个8位有符号整型的字节数组,大端字节序 +//Get an 8-bit signed integer byte array, big-endian endian function getInt8Bytes(num) { return getUint8Array(1, function (view) { view.setInt8(0, num); }) } -//得到一个8位无符号整型的字节数组,大端字节序 +//Get an 8-bit unsigned integer byte array with big-endian endianism function getUint8Bytes(num) { return getUint8Array(1, function (view) { view.setUint8(0, num); }) } -//得到一个16位有符号整型的字节数组,大端字节序 +//Get a 16-bit signed integer byte array with big-endian entitlement function getInt16Bytes(num) { return getUint8Array(2, function (view) { view.setInt16(0, num); }) } From b18cf9868f8d4436115329bb406193b4cb0100e9 Mon Sep 17 00:00:00 2001 From: No-Brainer <125658152+dumbeng@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:58:30 +0800 Subject: [PATCH 10/17] release: aspect-tool 0.0.59 && aspect-libs 0.0.34 (#41) * chore: bump versions * Fix/args (#35) * fix: args for struct * fix: args for struct * fix: args for struct * fix:test error --------- Co-authored-by: Gene <125658572+gene-zhan@users.noreply.github.com> --- package-lock.json | 38 +- packages/libs/package-lock.json | 18 +- packages/libs/package.json | 4 +- packages/testcases/aspect/black-list.ts | 114 + .../aspect/crypto-ecrecover-aspect.ts | 3 + .../testcases/aspect/crypto-hash-aspect.ts | 3 + .../aspect/goplus/Intercept-large-tx.ts | 37 + packages/testcases/aspect/operation-test.ts | 90 + packages/testcases/build.sh | 2 +- packages/testcases/contracts/event_log.sol | 12 + packages/testcases/contracts/store.sol | 18 + packages/testcases/package-lock.json | 96 +- packages/testcases/package.json | 3 +- packages/testcases/scripts/transfer.cjs | 2 +- packages/testcases/tests/bese-test.js | 8 +- packages/testcases/tests/black-list.test.js | 83 + .../testcases/tests/context-key-check.test.js | 10 +- .../tests/context-permission-check.test.js | 2 +- packages/testcases/tests/event-deploy.test.js | 29 + packages/testcases/tests/jsonrpc/base.test.js | 34 + packages/testcases/tests/jsonrpc/eth.test.js | 290 + packages/testcases/tests/jsonrpc/net.test.js | 94 + packages/testcases/tests/jsonrpc/web3.test.js | 55 + .../testcases/tests/operation-aspect.test.js | 4 +- packages/testcases/tests/operation.test.js | 23 + .../testcases/tests/type-check-aspect.test.js | 42 +- packages/testcases/tests/utils/base.js | 171 + packages/testcases/tests/websocket/ws.test.js | 34 + packages/toolkit/package.json | 2 +- packages/toolkit/src/commands/init.ts | 8 +- .../toolkit/src/tmpl/scripts/contract-call.ts | 16 +- .../src/tmpl/scripts/contract-deploy.ts | 10 +- .../toolkit/src/tmpl/scripts/contract-send.ts | 13 +- pnpm-lock.yaml | 14573 ++++++++++------ 34 files changed, 10412 insertions(+), 5529 deletions(-) create mode 100644 packages/testcases/aspect/black-list.ts create mode 100644 packages/testcases/aspect/goplus/Intercept-large-tx.ts create mode 100644 packages/testcases/aspect/operation-test.ts create mode 100644 packages/testcases/contracts/event_log.sol create mode 100644 packages/testcases/contracts/store.sol create mode 100644 packages/testcases/tests/black-list.test.js create mode 100644 packages/testcases/tests/event-deploy.test.js create mode 100644 packages/testcases/tests/jsonrpc/base.test.js create mode 100644 packages/testcases/tests/jsonrpc/eth.test.js create mode 100644 packages/testcases/tests/jsonrpc/net.test.js create mode 100644 packages/testcases/tests/jsonrpc/web3.test.js create mode 100644 packages/testcases/tests/operation.test.js create mode 100644 packages/testcases/tests/utils/base.js create mode 100644 packages/testcases/tests/websocket/ws.test.js diff --git a/package-lock.json b/package-lock.json index 58db34c..8cb7f96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@changesets/cli": "^2.25.2", "@theguild/eslint-config": "^0.9.0", "@theguild/prettier-config": "^1.0.0", - "assemblyscript": "^0.27.23", + "assemblyscript": "^0.24.1", "babel-jest": "^29.3.1", "eslint": "^8.31.0", "jest": "29.5.0", @@ -4208,21 +4208,21 @@ } }, "node_modules/assemblyscript": { - "version": "0.27.23", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.23.tgz", - "integrity": "sha512-+oLTB2IapORXof+bel+HliNUuEScUW4jpBIwV3Y4fDGiT0cu1qI+AJ1SG2RbJqvMo7fbUBGXv2ESq3iE9hK2rQ==", + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.24.1.tgz", + "integrity": "sha512-uqR7NW0z/QFuqOkszoCb2F2jJI0VsmmmATRYG2JGzspC9nkct/8+6Pad7amCnIRriAC/T9AknEs+Qv/U/+fNpQ==", "dev": true, "dependencies": { - "binaryen": "116.0.0-nightly.20240114", - "long": "^5.2.1" + "binaryen": "110.0.0-nightly.20221105", + "long": "^5.2.0" }, "bin": { "asc": "bin/asc.js", "asinit": "bin/asinit.js" }, "engines": { - "node": ">=16", - "npm": ">=7" + "node": ">=16.0.0", + "npm": ">=7.0.0" }, "funding": { "type": "opencollective", @@ -4503,9 +4503,9 @@ } }, "node_modules/binaryen": { - "version": "116.0.0-nightly.20240114", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", - "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", + "version": "110.0.0-nightly.20221105", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221105.tgz", + "integrity": "sha512-OBESOc51q3SwgG8Uv8nMzGnSq7LJpSB/Fu8B3AjlZg6YtCEwRnlDWlnwNB6mdql+VdexfKmNcsrs4K7MYidmdQ==", "dev": true, "bin": { "wasm-opt": "bin/wasm-opt", @@ -17614,13 +17614,13 @@ "dev": true }, "assemblyscript": { - "version": "0.27.23", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.23.tgz", - "integrity": "sha512-+oLTB2IapORXof+bel+HliNUuEScUW4jpBIwV3Y4fDGiT0cu1qI+AJ1SG2RbJqvMo7fbUBGXv2ESq3iE9hK2rQ==", + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.24.1.tgz", + "integrity": "sha512-uqR7NW0z/QFuqOkszoCb2F2jJI0VsmmmATRYG2JGzspC9nkct/8+6Pad7amCnIRriAC/T9AknEs+Qv/U/+fNpQ==", "dev": true, "requires": { - "binaryen": "116.0.0-nightly.20240114", - "long": "^5.2.1" + "binaryen": "110.0.0-nightly.20221105", + "long": "^5.2.0" } }, "ast-types-flow": { @@ -17829,9 +17829,9 @@ "dev": true }, "binaryen": { - "version": "116.0.0-nightly.20240114", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", - "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", + "version": "110.0.0-nightly.20221105", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221105.tgz", + "integrity": "sha512-OBESOc51q3SwgG8Uv8nMzGnSq7LJpSB/Fu8B3AjlZg6YtCEwRnlDWlnwNB6mdql+VdexfKmNcsrs4K7MYidmdQ==", "dev": true }, "bplist-parser": { diff --git a/packages/libs/package-lock.json b/packages/libs/package-lock.json index 64a8c31..f7eccf5 100644 --- a/packages/libs/package-lock.json +++ b/packages/libs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@artela/aspect-libs", - "version": "0.0.31", + "version": "0.0.33", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@artela/aspect-libs", - "version": "0.0.31", + "version": "0.0.33", "dependencies": { "as-proto": "^1.3.0", "assemblyscript": "^0.27.9" @@ -78,11 +78,11 @@ } }, "node_modules/assemblyscript": { - "version": "0.27.9", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.9.tgz", - "integrity": "sha512-cFE/AMjVtBQ2iKFZPu/a3Z/KJzGex61C+X+y3GuLJ8Hr9Zdf46sy/JlIl6ikothQd2umM9CQDAD/uAPAEHL+oA==", + "version": "0.27.25", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.25.tgz", + "integrity": "sha512-hkx6Vz+EFVA2hqFfnTWfO14892scFIkJzdXyqfXUoBS76cLbar0PFJQ7yZuL9m/i5xpjFk9Bz2094uHLh7W5UA==", "dependencies": { - "binaryen": "112.0.0-nightly.20230411", + "binaryen": "116.0.0-nightly.20240114", "long": "^5.2.1" }, "bin": { @@ -105,9 +105,9 @@ "dev": true }, "node_modules/binaryen": { - "version": "112.0.0-nightly.20230411", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-112.0.0-nightly.20230411.tgz", - "integrity": "sha512-4V9r9x9fjAVFZdR2yvBFc3BEJJIBYvd2X8X8k0zAuJsao2gl9wNHDmpQ30QsLo6hgkRfRImkCbCjhXW3RDOYXQ==", + "version": "116.0.0-nightly.20240114", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", + "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", "bin": { "wasm-opt": "bin/wasm-opt", "wasm2js": "bin/wasm2js" diff --git a/packages/libs/package.json b/packages/libs/package.json index 7712d7a..cc7b59c 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -1,12 +1,12 @@ { "name": "@artela/aspect-libs", - "version": "0.0.33", + "version": "0.0.34", "description": "AssemblyScript library for writing Artela Aspect", "main": "index.ts", "module": "index.ts", "types": "index.ts", "scripts": { - "build": "asc --exportRuntime --runtime stub index.ts --lib aspect-libs -b aspect-libs.wasm", + "build": "asc index.ts --lib aspect-libs -b aspect-libs.wasm --target release --optimize --disable bulk-memory --debug --runtime stub --exportRuntime --exportStart __aspect_start__", "format": "prettier --write -c **/*.ts", "lint": "prettier -c **/*.ts", "typedoc": "npx typedoc --tsconfig typedoc.json" diff --git a/packages/testcases/aspect/black-list.ts b/packages/testcases/aspect/black-list.ts new file mode 100644 index 0000000..c0e15a7 --- /dev/null +++ b/packages/testcases/aspect/black-list.ts @@ -0,0 +1,114 @@ +import { + allocate, + entryPoint, + execute, + IPreContractCallJP, + uint8ArrayToHex, sys, IAspectOperation, stringToUint8Array, + PreContractCallInput, OperationInput, uint8ArrayToString, ethereum +} from "@artela/aspect-libs"; + +/** + * Please describe what functionality this aspect needs to implement. + * + * About the concept of Aspect @see [join-point](https://docs.artela.network/develop/core-concepts/join-point) + * How to develop an Aspect @see [Aspect Structure](https://docs.artela.network/develop/reference/aspect-lib/aspect-structure) + */ +class Aspect implements IPreContractCallJP, IAspectOperation { + + /** + * isOwner is the governance account implemented by the Aspect, when any of the governance operation + * (including upgrade, config, destroy) is made, isOwner method will be invoked to check + * against the initiator's account to make sure it has the permission. + * + * @param sender address of the transaction + * @return true if check success, false if check fail + */ + isOwner(sender: Uint8Array): bool { + return true; + } + + private RiskKey: string = "risk-accounts"; + + /** + * postContractCall is a join-point which will be invoked after a contract call has finished. + * + * @param input input to the current join point + */ + preContractCall(input: PreContractCallInput): void { + // Implement me... + + // const from = uint8ArrayToHex(input.call!.from); + // + // const currentCallMethod = ethereum.parseMethodSig(input.call!.data); + // + // // Define functions that are not allowed to be reentered. + // const noReentrantMethods: Array = [ + // ethereum.computeMethodSig('swapExactTokensForETH(uint, uint, address[] , address , uint )'), + // ethereum.computeMethodSig('swapETHForExactTokens(uint , address[] , address , uint )'), + // ethereum.computeMethodSig('swapExactETHForTokensSupportingFeeOnTransferTokens(uint ,address[],address ,uint) '), + // ethereum.computeMethodSig('swapExactTokensForTokensSupportingFeeOnTransferTokens(uint ,uint ,address[] ,address ,uint )'), + // ethereum.computeMethodSig('swapExactTokensForETHSupportingFeeOnTransferTokens(uint ,uint ,address[] ,address ,uint)'), + // ethereum.computeMethodSig('swapTokensForExactETH(uint , uint , address[] , address , uint )'), + // ethereum.computeMethodSig('swapExactETHForTokens(uint, address[], address, uint)'), + // ethereum.computeMethodSig('swapTokensForExactTokens(uint,uint,address[],address,uint)'), + // ethereum.computeMethodSig('swapExactTokensForTokens(uint,uint,address[],address,uint)'), + // ]; + // + // // Verify if the current method is within the scope of functions that are not susceptible to reentrancy. + // if (noReentrantMethods.includes(currentCallMethod)) { + const from = uint8ArrayToHex(input.call!.from); + sys.log("|||| preContractCall from: " + from) + + const accounts = sys.aspect.mutableState.get(this.RiskKey).unwrap(); + sys.log("|||| preContractCall accounts: " + accounts) + if (accounts.includes(from)) { + sys.revert("tx from in risk list") + } + // } + + } + + operation(input: OperationInput): Uint8Array { + // +0xssss,0xxxx add account + // -0x8fada,0xbbxx remove account + const addPrefix = "+" + const delPrefix = "-" + const splitChar = ","; + + const callData = input.callData; + const data = uint8ArrayToString(callData); + + const accounts = sys.aspect.mutableState.get(this.RiskKey).unwrap(); + const strings = accounts.split(splitChar); + let newSet = new Set() + for (let i = 0; i < strings.length; i++) { + newSet.add(strings[i]) + } + if (data.startsWith(addPrefix)) { + let accArray = data.substring(addPrefix.length).split(splitChar); + for (let i = 0; i < accArray.length; i++) { + newSet.add(accArray[i]) + } + } + if (data.startsWith(delPrefix)) { + let accArray = data.substring(delPrefix.length).split(splitChar); + for (let i = 0; i < accArray.length; i++) { + newSet.delete(accArray[i]) + } + } + + const resultAcc = newSet.values().join(splitChar) + sys.aspect.mutableState.get(this.RiskKey).set(resultAcc) + return stringToUint8Array("success"); + } + +} + +// 2.register aspect Instance +const aspect = new Aspect() +entryPoint.setAspect(aspect) +entryPoint.setOperationAspect(aspect) + +// 3.must export it +export {execute, allocate} + diff --git a/packages/testcases/aspect/crypto-ecrecover-aspect.ts b/packages/testcases/aspect/crypto-ecrecover-aspect.ts index 1c50907..2bbac72 100644 --- a/packages/testcases/aspect/crypto-ecrecover-aspect.ts +++ b/packages/testcases/aspect/crypto-ecrecover-aspect.ts @@ -13,6 +13,9 @@ import { } from '@artela/aspect-libs'; class AspectTest implements IAspectOperation { + isOwner(sender: Uint8Array): bool { + return true; + } rmPrefix(data: string): string { if (data.startsWith('0x')) { return data.substring(2, data.length); diff --git a/packages/testcases/aspect/crypto-hash-aspect.ts b/packages/testcases/aspect/crypto-hash-aspect.ts index b7b946d..027dd9e 100644 --- a/packages/testcases/aspect/crypto-hash-aspect.ts +++ b/packages/testcases/aspect/crypto-hash-aspect.ts @@ -12,6 +12,9 @@ import { } from '@artela/aspect-libs'; class AspectTest implements IAspectOperation { + isOwner(sender: Uint8Array): bool { + return true; + } operation(input: OperationInput): Uint8Array { const keccak = sys.hostApi.crypto.keccak(input.callData); sys.log('||| keccak ' + uint8ArrayToHex(keccak)); diff --git a/packages/testcases/aspect/goplus/Intercept-large-tx.ts b/packages/testcases/aspect/goplus/Intercept-large-tx.ts new file mode 100644 index 0000000..8a305cf --- /dev/null +++ b/packages/testcases/aspect/goplus/Intercept-large-tx.ts @@ -0,0 +1,37 @@ +// The entry file of your WebAssembly module. + +import { + allocate, BigInt, + entryPoint, + execute, fromUint8Array, + IPreContractCallJP, + PreContractCallInput, + sys, +} from '@artela/aspect-libs'; + +class GuardPoolAspect implements IPreContractCallJP { + isOwner(sender: Uint8Array): bool { + return true; + } + + + preContractCall(input: PreContractCallInput): void { + //get the value from tx + const currentVal = fromUint8Array(input.call!.value); + + + const target = BigInt.fromUInt64(10000); + //if the value is greater than 100000 then revert + if (currentVal.compareTo(target) > 0) { + sys.revert('revert'); + } + } + +} + +// 2.register aspect Instance +const aspect = new GuardPoolAspect(); +entryPoint.setAspect(aspect); + +// 3.must export it +export {execute, allocate}; diff --git a/packages/testcases/aspect/operation-test.ts b/packages/testcases/aspect/operation-test.ts new file mode 100644 index 0000000..2c97737 --- /dev/null +++ b/packages/testcases/aspect/operation-test.ts @@ -0,0 +1,90 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + OperationInput, + uint8ArrayToHex, + sys, +} from '@artela/aspect-libs'; + +class AspectTest implements IAspectOperation { + parseOP(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(2, 6); + } + return calldata.substring(0, 4); + + } + + parsePrams(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(6, calldata.length); + } + return calldata.substring(4, calldata.length); + + } + + operation(input: OperationInput): Uint8Array { + // calldata encode rule + // * 2 bytes: op code + // op codes lists: + // 0x0001 | registerSysPlayer + // + // ** 0x10xx means read only op ** + // 0x1001 | getSysPlayers + // 0x1002 | getAAWaletNonce + // + // * variable-length bytes: params + // encode rule of params is defined by each method + const calldata = uint8ArrayToHex(input.callData); + const op = this.parseOP(calldata); + const params = this.parsePrams(calldata); + + sys.log("||| num = " + calldata + " params=" + params+" op="+op); + if (op == "0001") { + sys.log('||| adamayu in 0001'); + return new Uint8Array(0); + } + if (op == "0002") { + sys.log('|||adamayu in 0002'); + return new Uint8Array(0); + } + if (op == "0003") { + sys.log('|||adamayu in 0003'); + return new Uint8Array(0); + } + if (op == "1001") { + sys.log('|||adamayu in 1001'); + return new Uint8Array(0); + } + if (op == "1002") { + sys.log('|||adamayu in 1002'); + return new Uint8Array(0); + } + if (op == "1003") { + sys.log('|||adamayu in 1003'); + return new Uint8Array(0); + } + if (op == "1004") { + sys.log('|||adamayu in 1004'); + return new Uint8Array(0); + } + + sys.revert("unknown op"); + return new Uint8Array(0); + } + + isOwner(sender: Uint8Array): bool { + return true; + } +} + +// 2.register aspect Instance +const aspect = new AspectTest(); +entryPoint.setOperationAspect(aspect); + +// 3.must export it +export {execute, allocate}; diff --git a/packages/testcases/build.sh b/packages/testcases/build.sh index dc40210..6934e12 100644 --- a/packages/testcases/build.sh +++ b/packages/testcases/build.sh @@ -9,7 +9,7 @@ asc_build() { # check if the file exists if [ -e "$file_path" ]; then fileName=$(basename $file_path .ts) - ./node_modules/assemblyscript/bin/asc.js $file_path --outFile ./build/${fileName}.wasm + ./node_modules/assemblyscript/bin/asc.js $file_path --outFile ./build/${fileName}.wasm --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__ echo "ok $file_path ./build/${fileName}.wasm " fi } diff --git a/packages/testcases/contracts/event_log.sol b/packages/testcases/contracts/event_log.sol new file mode 100644 index 0000000..ea9e1e7 --- /dev/null +++ b/packages/testcases/contracts/event_log.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity ^0.8.0; + +contract DepositEvent { + + event Deposit(address indexed _from, bytes32 indexed _id, uint _value); + + function deposit(bytes32 _id) public payable { + emit Deposit(msg.sender, _id, msg.value); + } +} \ No newline at end of file diff --git a/packages/testcases/contracts/store.sol b/packages/testcases/contracts/store.sol new file mode 100644 index 0000000..c44c0ee --- /dev/null +++ b/packages/testcases/contracts/store.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity >=0.7.0 <0.9.0; + +contract Store { + uint pos0; + mapping(address => uint) pos1; + + event LogTest( + string text + ); + + function Storage() public { + pos0 = 1234; + pos1[msg.sender] = 5678; + emit LogTest("log somethimg"); + } +} \ No newline at end of file diff --git a/packages/testcases/package-lock.json b/packages/testcases/package-lock.json index 7221180..1c8aa92 100644 --- a/packages/testcases/package-lock.json +++ b/packages/testcases/package-lock.json @@ -16,8 +16,7 @@ "@assemblyscript/loader": "^0.27.5", "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", - "bignumber.js": "^9.1.2", - "web3-utils": "1.10.3" + "bignumber.js": "^9.1.2" }, "devDependencies": { "@artela/aspect-tool": "file:../toolkit", @@ -61,7 +60,7 @@ }, "../libs": { "name": "@artela/aspect-libs", - "version": "0.0.31", + "version": "0.0.33", "dependencies": { "as-proto": "^1.3.0", "assemblyscript": "^0.27.9" @@ -75,7 +74,7 @@ }, "../toolkit": { "name": "@artela/aspect-tool", - "version": "0.0.53", + "version": "0.0.58", "dev": true, "license": "ISC", "dependencies": { @@ -276,9 +275,9 @@ } }, "node_modules/@assemblyscript/loader": { - "version": "0.27.22", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.27.22.tgz", - "integrity": "sha512-bcFSC0cfd/Lx3OcM9gqBcBd7JECWQd8WQbk4eWj6T4CIhPaJuHMyvEiGR0y3JhPJwPmoorR03nd1hCqm3thyrg==" + "version": "0.27.25", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.27.25.tgz", + "integrity": "sha512-o5D5trJEmUS6ghwLLol8PgFeA2z0A/5pgSqahQQiiG/nf4MuFlw6V7ftD9ucaiuy7cc/Bi/zLPjjCdG4/SeyIw==" }, "node_modules/@ethereumjs/common": { "version": "2.5.0", @@ -289,17 +288,6 @@ "ethereumjs-util": "^7.1.1" } }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/@ethereumjs/tx": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-5.1.0.tgz", @@ -414,30 +402,6 @@ "@scure/bip39": "1.2.1" } }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", - "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", - "dependencies": { - "@noble/curves": "1.1.0", - "@noble/hashes": "1.3.1", - "@scure/bip32": "1.3.1", - "@scure/bip39": "1.2.1" - } - }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -1061,12 +1025,12 @@ } }, "node_modules/assemblyscript": { - "version": "0.27.22", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.22.tgz", - "integrity": "sha512-6ClobsR4Hxn6K0daYp/+n9qWTqVbpdVeSGSVDqRvUEz66vvFb8atS6nLm+fnQ54JXuXmzLQy0uWYYgB8G59btQ==", + "version": "0.27.25", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.25.tgz", + "integrity": "sha512-hkx6Vz+EFVA2hqFfnTWfO14892scFIkJzdXyqfXUoBS76cLbar0PFJQ7yZuL9m/i5xpjFk9Bz2094uHLh7W5UA==", "dev": true, "dependencies": { - "binaryen": "116.0.0-nightly.20231102", + "binaryen": "116.0.0-nightly.20240114", "long": "^5.2.1" }, "bin": { @@ -1168,9 +1132,9 @@ } }, "node_modules/binaryen": { - "version": "116.0.0-nightly.20231102", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20231102.tgz", - "integrity": "sha512-aPU9tlKdw/gcXx6u4PxtDgOtGjg/ZKnYdk23ctYb70GxZgPhWnGWmnBt01aV5dt5yFFo2V4rbB7SzpSFhViFQA==", + "version": "116.0.0-nightly.20240114", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", + "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", "dev": true, "bin": { "wasm-opt": "bin/wasm-opt", @@ -2673,11 +2637,6 @@ "node": ">= 0.6" } }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -4290,35 +4249,6 @@ "node": ">=8.0.0" } }, - "node_modules/web3-utils": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.3.tgz", - "integrity": "sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==", - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", - "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", - "dependencies": { - "@noble/curves": "1.1.0", - "@noble/hashes": "1.3.1", - "@scure/bip32": "1.3.1", - "@scure/bip39": "1.2.1" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/packages/testcases/package.json b/packages/testcases/package.json index cd2693d..ebd1e18 100644 --- a/packages/testcases/package.json +++ b/packages/testcases/package.json @@ -25,9 +25,10 @@ "@artela/web3-eth": "1.9.22", "@artela/web3-utils": "1.9.22", "@assemblyscript/loader": "^0.27.5", + "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", "bignumber.js": "^9.1.2", - "@ethereumjs/tx": "^5.1.0" + "node-fetch": "^3.3.2" }, "devDependencies": { "@artela/aspect-tool": "file:../toolkit", diff --git a/packages/testcases/scripts/transfer.cjs b/packages/testcases/scripts/transfer.cjs index 563bf0f..eef5e0f 100644 --- a/packages/testcases/scripts/transfer.cjs +++ b/packages/testcases/scripts/transfer.cjs @@ -61,7 +61,7 @@ async function f() { let tx1 = { 'from': senderAddr, 'to': receiver, - 'value': web3.utils.toWei('100', 'ether'), // transfer 1 eth + 'value': web3.utils.toWei('730000', 'ether'), // transfer 1 eth 'gas': 2000000, 'gaslimit': 4000000, 'nonce': bankNonce diff --git a/packages/testcases/tests/bese-test.js b/packages/testcases/tests/bese-test.js index 4379533..9423152 100644 --- a/packages/testcases/tests/bese-test.js +++ b/packages/testcases/tests/bese-test.js @@ -4,12 +4,10 @@ import fs from 'fs'; import Web3 from '@artela/web3'; import {LegacyTransaction as EthereumTx} from '@ethereumjs/tx' import BigNumber from 'bignumber.js'; +import {DefPrivateKeyPath,DefProjectConfig,DefGasLimit,ASPECT_ADDR} from "./utils/base.js"; // 然后在代码中使用 Transaction 类 -const DefProjectConfig = "../project.config.json"; -const DefPrivateKeyPath = "../privateKey.txt"; -const DefGasLimit = 9_000_000; -const ASPECT_ADDR = "0x0000000000000000000000000000000000A27E14"; + function bytesToHex(bytes) { return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), ''); } @@ -662,7 +660,7 @@ export async function EntryPoint({ to: ASPECT_ADDR, data: encodeABI, gasPrice, - gas: 900_000 + gas: 20_000_000 } const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); diff --git a/packages/testcases/tests/black-list.test.js b/packages/testcases/tests/black-list.test.js new file mode 100644 index 0000000..fa7a828 --- /dev/null +++ b/packages/testcases/tests/black-list.test.js @@ -0,0 +1,83 @@ +import { + BindAspect, + ConnectToANode, + ContractCall, + DeployAspect, + DeployContract, + EntryPoint, + SendTx +} from "./bese-test.js"; + +import assert from "assert"; + +//Write the numeric value into the view to get its byte array, big-endian endian +function getUint8Array(len, setNum) { + var buffer = new ArrayBuffer(len); //specify the byte length + setNum(new DataView(buffer)); //Depending on the type, different functions are called to write values + return new Uint8Array(buffer); //create a byte array to fetch data from the cache +} +//Get an 8-bit signed integer byte array, big-endian endian +function getInt8Bytes(num) { + return getUint8Array(1, function (view) { view.setInt8(0, num); }) +} +//Get an 8-bit unsigned integer byte array with big-endian endianism +function getUint8Bytes(num) { + return getUint8Array(1, function (view) { view.setUint8(0, num); }) +} +//Get a 16-bit signed integer byte array with big-endian entitlement +function getInt16Bytes(num) { + return getUint8Array(2, function (view) { view.setInt16(0, num); }) +} + +const aspect = await DeployAspect({ + wasmPath: "../build/black-list.wasm", + joinPoints: ["PreContractCall"], + +}) + +console.log("==deploy Aspect Result== ", aspect) +assert.ok(aspect.aspectAddress, "deploy Aspect fail") + +const textEncoder = new TextEncoder(); +const rawcall = await EntryPoint({ + aspectId: aspect.aspectAddress, + operationData: textEncoder.encode("+0x1167c2e50dFE34b9Ad593d2c6694731097147317,0x1167c2e50dFE34b9Ad593d2c6694731097147312") +}) +const web3 = ConnectToANode(); +console.log(rawcall) +const rest = web3.eth.abi.decodeParameter('string', rawcall); +console.log(rawcall, rest) +//assert.strictEqual(rest, "test") + + + +const result = await DeployContract({ + abiPath: "../build/contract/Storage.abi", bytePath: "../build/contract/Storage.bin" +}) +assert.ok(result.contractAddress, "Deploy Storage Contract fail"); +console.log("==deploy Storage Contract Result== ", result) + + +const bindResult = await BindAspect({ + abiPath: "../build/contract/Storage.abi", + contractAddress: result.contractAddress, + aspectId: aspect.aspectAddress +}) +console.log("==bind Aspect Result== ", bindResult) + +const storeVal = await SendTx({ + contract: result.contractAddress, + abiPath: "../build/contract/Storage.abi", + method: "store", + args: [100] +}); +console.log("==== storeVal===", storeVal); + +const callVal = await ContractCall({ + contract: result.contractAddress, + abiPath: "../build/contract/Storage.abi", + method: "retrieve" +}); +console.log("==== reuslt===" + callVal); +assert.strictEqual(callVal, "100", "Contract Call result fail") + diff --git a/packages/testcases/tests/context-key-check.test.js b/packages/testcases/tests/context-key-check.test.js index 7b28322..861d54d 100644 --- a/packages/testcases/tests/context-key-check.test.js +++ b/packages/testcases/tests/context-key-check.test.js @@ -93,7 +93,8 @@ const VerifyCheck = async (contractObj, joinPoint, key) => { console.log("==== boundAddrs ===", boundAddrs) assert.ok(bindResult.status, 'Bind aspect fail') assert.ok(bindResult2.status, 'Bind aspect fail') - assert.ok(await SendUnsignedTxTest(contractObj.contractAddress, key), `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) + const result = await SendUnsignedTxTest(contractObj.contractAddress, key) + assert.ok(!result, `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) } const VerifyCheckResult = { @@ -127,7 +128,8 @@ const OperationCheck = async (contractObj, key) => { const transactionReceipt = await DeployAspect({ wasmPath: "../build/context-key-check.wasm" }) - assert.ok(await entryPointTest(transactionReceipt.aspectAddress, key), `[EntryPointTest] Test failed, key ${key}`) + const po=await entryPointTest(transactionReceipt.aspectAddress, key) + assert.ok(!po, `[EntryPointTest] Test failed, key ${key}`) } for (var k in operationKeys.accessLimitKeys) { const key = stringToHex(operationKeys.accessLimitKeys[k]); @@ -161,8 +163,8 @@ const JoinPointCheck = async (contractObj, joinPoint, key) => { }) assert.ok(bindResult.status, 'Bind aspect fail') - assert.ok(await sendTxTest(contractObj.contractAddress, key), `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) - assert.ok(await contractCallTest(contractObj.contractAddress, key), `[CallTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) + assert.ok(!await sendTxTest(contractObj.contractAddress, key), `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) + assert.ok(!await contractCallTest(contractObj.contractAddress, key), `[CallTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) } diff --git a/packages/testcases/tests/context-permission-check.test.js b/packages/testcases/tests/context-permission-check.test.js index 6eb8c02..0cf957b 100644 --- a/packages/testcases/tests/context-permission-check.test.js +++ b/packages/testcases/tests/context-permission-check.test.js @@ -83,4 +83,4 @@ const entryPointTest = async (contract, key) => { return false } } -assert.ok((await entryPointTest(aspect.aspectAddress,"0x01")), `[entryPoint: normal test] Failed, key-value can't be accessed`) +assert.ok(!(await entryPointTest(aspect.aspectAddress,"0x01")), `[entryPoint: normal test] Failed, key-value can't be accessed`) diff --git a/packages/testcases/tests/event-deploy.test.js b/packages/testcases/tests/event-deploy.test.js new file mode 100644 index 0000000..6a2e1c8 --- /dev/null +++ b/packages/testcases/tests/event-deploy.test.js @@ -0,0 +1,29 @@ +import assert from "assert"; +import { TextEncoder } from "util"; +import { BindAspect, ContractCall, DeployAspect, DeployContract, SendTx } from "./bese-test.js"; + +// const result = await DeployContract({ +// abiPath: "../build/contract/DepositEvent.abi", bytePath: "../build/contract/DepositEvent.bin" +// }) +// assert.ok(result.contractAddress, "Deploy Storage Contract fail"); +// console.log("==deploy Storage Contract Result== ", result) +// + + +const storeVal = await SendTx({ + contract: "0xc7f8eb493939d2f14c136efcc359bd23e1a0f8ee", + abiPath: "../build/contract/DepositEvent.abi", + method: "deposit", + args: ['0x01'] +}); + + console.log("==== storeVal===", storeVal); +// +// +// const callVal = await ContractCall({ +// contract: result.contractAddress, +// abiPath: "../build/contract/Storage.abi", +// method: "retrieve" +// }); +// console.log("==== reuslt===" + callVal); +// assert.strictEqual(callVal, "100", "Contract Call result fail") \ No newline at end of file diff --git a/packages/testcases/tests/jsonrpc/base.test.js b/packages/testcases/tests/jsonrpc/base.test.js new file mode 100644 index 0000000..204e505 --- /dev/null +++ b/packages/testcases/tests/jsonrpc/base.test.js @@ -0,0 +1,34 @@ +import fetch from 'node-fetch'; +import fs from 'fs'; +import test from 'node:test' +import assert from 'node:assert/strict' + + +const DefProjectConfig = "../../project.config.json"; + +export async function TestRpc(data, assertFunc, nodeConfig = DefProjectConfig) { + + let node = "" + if (nodeConfig.startsWith("http")) { + node = nodeConfig + } else { + const configJson = JSON.parse(fs.readFileSync(nodeConfig, "utf-8").toString()); + node = configJson.node + } + + const response = await fetch(node, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(data), + }).then(response => response.json()) + + // assert respsonse expectedResult + if (assertFunc) { + assertFunc(response); + } + + return response +} + diff --git a/packages/testcases/tests/jsonrpc/eth.test.js b/packages/testcases/tests/jsonrpc/eth.test.js new file mode 100644 index 0000000..b25c87e --- /dev/null +++ b/packages/testcases/tests/jsonrpc/eth.test.js @@ -0,0 +1,290 @@ +import assert from 'node:assert/strict' +import {TestRpc} from "./base.test.js"; +import {DeployContract} from "../bese-test.js"; +import { RootDirectory} from "../utils/base.js"; + +const protocol = { + jsonrpc: '2.0', + id: 50, + method: 'eth_protocolVersion', + params: [], +}; + + +function resultNotEmptyFunc(response) { + assert.ok(response.result, 'response should not be null'); +} + +let res = await TestRpc(protocol, resultNotEmptyFunc); +console.log(res) + +const sync = {"jsonrpc": "2.0", "id": 51, "method": "eth_syncing", "params": []}; +res = await TestRpc(sync); +console.log(res) + +const gasPrice = {"jsonrpc": "2.0", "id": 52, "method": "eth_gasPrice", "params": []}; +res = await TestRpc(gasPrice); +console.log(res) + +const accounts = {"jsonrpc": "2.0", "id": 53, "method": "eth_accounts", "params": []}; +const accountRes = await TestRpc(accounts); +console.log(accountRes) + +const blockNumber = {"jsonrpc": "2.0", "id": 54, "method": "eth_blockNumber", "params": []}; +res = await TestRpc(blockNumber); +console.log(res) + +const eth_getBalance = { + "jsonrpc": "2.0", + "id": 55, + "method": "eth_getBalance", + "params": [accountRes.result[2], "latest"] +}; +res = await TestRpc(eth_getBalance); +console.log(res) + + +const result = await DeployContract({ + abiPath: RootDirectory + "/build/contract/Store.abi", bytePath: RootDirectory + "/build/contract/Store.bin" +}) +assert.ok(result.contractAddress, "Deploy Store Contract fail"); +console.log("==Deploy Store Contract Result== ", result) + +const eth_getStorageAt = { + "jsonrpc": "2.0", + "id": 56, + "method": "eth_getStorageAt", + "params": [result.contractAddress, '0x0', "latest"] +}; +res = await TestRpc(eth_getStorageAt); +console.log(res) + +const eth_getStorageAt2 = { + "jsonrpc": "2.0", + "id": 56, + "method": "eth_getStorageAt", + "params": [result.contractAddress, '0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9', "latest"] +}; +res = await TestRpc(eth_getStorageAt2); +console.log(res) + +const fromTxCount = { + "jsonrpc": "2.0", + "id": 57, + "method": "eth_getTransactionCount", + "params": [result.from, "latest"] +} +res = await TestRpc(fromTxCount); +console.log(res) + +const txCount = { + "jsonrpc": "2.0", + "id": 57, + "method": "eth_getBlockTransactionCountByNumber", + "params": ['0x' + result.blockNumber.toString(16)] +} +res = await TestRpc(txCount); +console.log(res) + + +const constHash = { + "jsonrpc": "2.0", + "id": 59, + "method": "eth_getBlockTransactionCountByHash", + "params": [result.blockHash] +} +res = await TestRpc(constHash); +console.log(res) + +const getCode = { + "jsonrpc": "2.0", + "id": 60, + "method": "eth_getCode", + "params": [result.from, '0x' + result.blockNumber.toString(16)] +} +res = await TestRpc(getCode); +console.log(res) + +// ./build/artelad keys add gene +// ./build/artelad debug addr art1q4xrcwq9rjy3j093pt38d4celk8hk7dhlym3mj + +const signtx = { + "jsonrpc": "2.0", + "id": 61, + "method": "eth_sign", + "params": ["0x054c3C38051C89193Cb10aE276d719Fd8F7b79b7", "0xdeadbeaf"] +} +res = await TestRpc(signtx); +console.log(res) + + +const transaction = { + "jsonrpc": "2.0", + "id": 62, + "method": "eth_sendTransaction", + "params": [{ + "from": result.from, + "to": result.contractAddress, + "value": "0xee3711be", + "gasLimit": "0x5208", + "gasPrice": "0x55ae82600" + }] +} + +res = await TestRpc(transaction); +console.log(res) + +const rawTx = { + "jsonrpc": "2.0", + "id": 63, + "method": "eth_sendRawTransaction", + "params": ["0xf9ff74c86aefeb5f6019d77280bbb44fb695b4d45cfe97e6eed7acd62905f4a85034d5c68ed25a2e7a8eeb9baf1b8401e4f865d92ec48c1763bf649e354d900b1c"] +} + +res = await TestRpc(rawTx); +console.log(res) + +const rawCall = { + "jsonrpc": "2.0", + "id": 64, + "method": "eth_call", + "params": [{ + "from": "0x3b7252d007059ffc82d16d022da3cbf9992d2f70", + "to": "0xddd64b4712f7c8f1ace3c145c950339eddaf221d", + "gas": "0x5208", + "gasPrice": "0x55ae82600", + "value": "0x16345785d8a0000", + "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675" + }, "0x0"] +} + +res = await TestRpc(rawCall); +console.log(res) + +const estimateGas = { + "jsonrpc": "2.0", + "id": 65, + "method": "eth_estimateGas", + "params": [{ + "from": "0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0", + "to": "0x3b7252d007059ffc82d16d022da3cbf9992d2f70", + "value": "0x16345785d8a00000" + }] +} +res = await TestRpc(estimateGas); +console.log(res) + +const blockByNum = {"jsonrpc": "2.0", "id": 66, "method": "eth_getBlockByNumber", "params": ["0x1", false]} +res = await TestRpc(blockByNum); +console.log(res) + + +const blockHash = { + "jsonrpc": "2.0", + "id": 67, + "method": "eth_getBlockByHash", + "params": ["0x1b9911f57c13e5160d567ea6cf5b545413f96b95e43ec6e02787043351fb2cc4", false] +}; +res = await TestRpc(blockHash); +console.log(res) + +const txByHash = + { + "jsonrpc": "2.0", + "id": 68, + "method": "eth_getTransactionByHash", + "params": ["0xec5fa15e1368d6ac314f9f64118c5794f076f63c02e66f97ea5fe1de761a8973"] + }; +res = await TestRpc(txByHash); +console.log(res) + +const getTx = { + "jsonrpc": "2.0", + "id": 69, + "method": "eth_getTransactionByBlockHashAndIndex", + "params": ["0x1b9911f57c13e5160d567ea6cf5b545413f96b95e43ec6e02787043351fb2cc4", "0x0"] +} +res = await TestRpc(getTx); +console.log(res) + + +const rept = { + "jsonrpc": "2.0", + "id": 70, + "method": "eth_getTransactionReceipt", + "params": ["0xae64961cb206a9773a6e5efeb337773a6fd0a2085ce480a174135a029afea614"] +} +res = await TestRpc(rept); +console.log(res) + +const filter = { + "jsonrpc": "2.0", + "id": 71, + "method": "eth_newFilter", + "params": [{"topics": ["0x0000000000000000000000000000000000000000000000000000000012341234"]}] +} +res = await TestRpc(filter); +console.log(res) + +const newFilter = {"jsonrpc": "2.0", "id": 72, "method": "eth_newBlockFilter", "params": []} +res = await TestRpc(newFilter); +console.log(res) + +const pendingFilter = {"jsonrpc": "2.0", "id": 73, "method": "eth_newPendingTransactionFilter", "params": []} +res = await TestRpc(pendingFilter); +console.log(res) + + +const filterUninstall = { + "jsonrpc": "2.0", + "id": 74, + "method": "eth_uninstallFilter", + "params": ["0xb91b6608b61bf56288a661a1bd5eb34a"] +} +res = await TestRpc(filterUninstall); +console.log(res) + +const filterChanges = { + "jsonrpc": "2.0", + "id": 75, + "method": "eth_getFilterChanges", + "params": ["0x127e9eca4f7751fb4e5cb5291ad8b455"] +} +res = await TestRpc(filterChanges); +console.log(res) + +const filterLogs = { + "jsonrpc": "2.0", + "id": 76, + "method": "eth_getFilterLogs", + "params": ["0x127e9eca4f7751fb4e5cb5291ad8b455"] +} +res = await TestRpc(filterLogs); +console.log(res) + +const geLogs = + { + "jsonrpc": "2.0", + "id": 77, + "method": "eth_getLogs", + "params": [{ + "topics": ["0x775a94827b8fd9b519d36cd827093c664f93347070a554f65e4a6f56cd738898", "0x0000000000000000000000000000000000000000000000000000000000000011"], + "fromBlock": `"latest"` + }] + } +res = await TestRpc(geLogs); +console.log(res) + +const coinbase = {"jsonrpc": "2.0", "id": 78, "method": "eth_coinbase", "params": []} +const coinbaseRes = await TestRpc(coinbase); +console.log(coinbaseRes) + +const getProof = { + "jsonrpc": "2.0", + "id": 79, + "method": "eth_getProof", + "params": ["0x1234567890123456789012345678901234567890", ["0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000001"], `"latest"`] +} +const getProofRes = await TestRpc(getProof); +console.log(getProofRes) + diff --git a/packages/testcases/tests/jsonrpc/net.test.js b/packages/testcases/tests/jsonrpc/net.test.js new file mode 100644 index 0000000..db4be85 --- /dev/null +++ b/packages/testcases/tests/jsonrpc/net.test.js @@ -0,0 +1,94 @@ +import assert from 'node:assert/strict' +import {TestRpc} from "./base.test.js"; + +/** + * net_version + */ +const netVersion = { + jsonrpc: '2.0', + id: 44, + method: 'net_version', + params: [], +}; + +function assertVersionFunc(response) { + const expectedResult = { + jsonrpc: '2.0', + id: 44, + result: '11820' + }; + assert.ok(response, 'response should not be null'); + assert.deepStrictEqual( + {jsonrpc: response.jsonrpc, id: response.id}, + {jsonrpc: expectedResult.jsonrpc, id: expectedResult.id}, + 'jsonrpc and id should be equal' + ); + assert.ok( + response.result.startsWith("118"), + 'version should have the same prefix' + ); +} + +const res = await TestRpc(netVersion, assertVersionFunc); + +console.log(res); + +/*** + * net_peerCount + */ +const peerCount = { + jsonrpc: '2.0', + id: 45, + method: 'net_peerCount', + params: [], +}; + +function assertPeerCountFunc(response) { + const expectedResult = { + jsonrpc: '2.0', + id: 45, + result: '0x0' + }; + assert.ok(response, 'response should not be null'); + assert.deepStrictEqual( + {jsonrpc: response.jsonrpc, id: response.id}, + {jsonrpc: expectedResult.jsonrpc, id: expectedResult.id}, + 'jsonrpc and id should be equal' + ); + assert.ok( + response.result.startsWith("0x"), + 'version should have the same prefix' + ); +} + +const countjson = await TestRpc(peerCount, assertPeerCountFunc); +console.log(countjson); + + + +/*** + * net_listening + */ +const listening = { + jsonrpc: '2.0', + id: 46, + method: 'net_listening', + params: [], +}; + +function assertListeningFunc(response) { + const expectedResult = { + jsonrpc: '2.0', + id: 46, + result: true + }; + assert.ok(response, 'response should not be null'); + assert.deepStrictEqual(response,expectedResult, + 'jsonrpc and id should be equal' + ); + +} +const listenjson = await TestRpc(listening,assertListeningFunc); +console.log(listenjson); + + diff --git a/packages/testcases/tests/jsonrpc/web3.test.js b/packages/testcases/tests/jsonrpc/web3.test.js new file mode 100644 index 0000000..6d4c5ca --- /dev/null +++ b/packages/testcases/tests/jsonrpc/web3.test.js @@ -0,0 +1,55 @@ +import assert from 'node:assert/strict' +import {TestRpc} from "./base.test.js"; + + +const clientVersion = { + jsonrpc: '2.0', + id: 42, + method: 'web3_clientVersion', + params: [], +}; + +function assertClientVersionFunc(response) { + const expectedResult = { + jsonrpc: '2.0', + id: 42, + result: 'artelad/v0.4.7-rc6-3-g7e1055a/darwin-amd64/go1.21.3' + }; + assert.ok(response, 'response should not be null'); + assert.deepStrictEqual( + {jsonrpc: response.jsonrpc, id: response.id}, + {jsonrpc: expectedResult.jsonrpc, id: expectedResult.id}, + 'jsonrpc and id should be equal' + ); + assert.ok( + response.result.startsWith(expectedResult.result.split('v0.4')[0]), + 'result should have the same prefix' + ); +} + +const res = await TestRpc(clientVersion, assertClientVersionFunc); + +console.log(res); + +const sha3 = { + jsonrpc: '2.0', + id: 43, + method: 'web3_sha3', + params: ["0x68656c6c6f20776f726c64"], +}; + +function assertSh3Func(response) { + const expectedResult = { + jsonrpc: '2.0', + id: 43, + result: '0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad' + }; + assert.ok(response, 'response should not be null'); + assert.deepStrictEqual(response,expectedResult, + 'sh3 response should be equal' + ); +} + +const resSh3 = await TestRpc(sha3,assertSh3Func); +console.log(resSh3); + diff --git a/packages/testcases/tests/operation-aspect.test.js b/packages/testcases/tests/operation-aspect.test.js index bff95b0..21bdb01 100644 --- a/packages/testcases/tests/operation-aspect.test.js +++ b/packages/testcases/tests/operation-aspect.test.js @@ -22,8 +22,8 @@ function getInt16Bytes(num) { } const aspect = await DeployAspect({ - wasmPath: "../build/operation-aspect.wasm", - properties: [{'key': 'num', 'value':getInt16Bytes(100)} ], + wasmPath: "../build/black-list.wasm", + joinPoints: "../build/black-list" }) diff --git a/packages/testcases/tests/operation.test.js b/packages/testcases/tests/operation.test.js new file mode 100644 index 0000000..c7f462f --- /dev/null +++ b/packages/testcases/tests/operation.test.js @@ -0,0 +1,23 @@ +import {ConnectToANode, DeployAspect, EntryPoint} from "./bese-test.js"; + +import assert from "assert"; + +//Write the numeric value into the view to get its byte array, big-endian endian + +const aspect = await DeployAspect({ + wasmPath: "../build/operation-test.wasm", +}) + +console.log("==deploy Aspect Result== ", aspect) +assert.ok(aspect.aspectAddress, "deploy Aspect fail") + + +const rawcall = await EntryPoint({ + aspectId: aspect.aspectAddress, + operationData: '0x100100001' +}) +const web3 = ConnectToANode(); +console.log(rawcall) +const rest = web3.eth.abi.decodeParameter('string', rawcall); +console.log(rawcall, rest) +assert.strictEqual(rest, "test") diff --git a/packages/testcases/tests/type-check-aspect.test.js b/packages/testcases/tests/type-check-aspect.test.js index 59bc31c..4f8344d 100644 --- a/packages/testcases/tests/type-check-aspect.test.js +++ b/packages/testcases/tests/type-check-aspect.test.js @@ -13,27 +13,27 @@ console.log("==deploy Storage Contract Result== ", result) // }) // // console.log("==deploy ScheduleTarget Contract Result== ", dcResult) - -const textEncoder = new TextEncoder() -const aspect = await DeployAspect({ - wasmPath: "../build/type-check-aspect.wasm", - joinPoints: ["PreTxExecute", "PostTxExecute"], - properties: [{ 'key': 'ScheduleTo', 'value': result.contractAddress }, - { 'key': 'Broker', 'value': result.from }, - { 'key': 'binding', 'value': result.contractAddress }, - { 'key': 'owner', 'value': result.from }, - { 'key': 'key_for_string', 'value': textEncoder.encode('test value') }], -}) -assert.ok(aspect.aspectAddress, "Deploy storage-aspect fail"); - -console.log("==deploy Aspect Result== ", aspect) - -const bindResult = await BindAspect({ - abiPath: "../build/contract/Storage.abi", - contractAddress: result.contractAddress, - aspectId: aspect.aspectAddress -}) -console.log("==bind Aspect Result== ", bindResult) +// +// const textEncoder = new TextEncoder() +// const aspect = await DeployAspect({ +// wasmPath: "../build/type-check-aspect.wasm", +// joinPoints: ["PreTxExecute", "PostTxExecute"], +// properties: [{ 'key': 'ScheduleTo', 'value': result.contractAddress }, +// { 'key': 'Broker', 'value': result.from }, +// { 'key': 'binding', 'value': result.contractAddress }, +// { 'key': 'owner', 'value': result.from }, +// { 'key': 'key_for_string', 'value': textEncoder.encode('test value') }], +// }) +// assert.ok(aspect.aspectAddress, "Deploy storage-aspect fail"); +// +// console.log("==deploy Aspect Result== ", aspect) +// +// const bindResult = await BindAspect({ +// abiPath: "../build/contract/Storage.abi", +// contractAddress: result.contractAddress, +// aspectId: aspect.aspectAddress +// }) +// console.log("==bind Aspect Result== ", bindResult) const storeVal = await SendTx({ contract: result.contractAddress, diff --git a/packages/testcases/tests/utils/base.js b/packages/testcases/tests/utils/base.js new file mode 100644 index 0000000..4fac542 --- /dev/null +++ b/packages/testcases/tests/utils/base.js @@ -0,0 +1,171 @@ +import path from 'path'; +import fs from 'fs'; +import Web3 from "@artela/web3"; + +// Recursively look up until you find a directory that contains package.json +function findRootDirectory(dir) { + if (fs.existsSync(path.join(dir, 'package.json'))) { + return dir; + } + + // If the root directory of the file system has been reached, the search is stopped + const parentDir = path.resolve(dir, '..'); + if (parentDir === dir) { + throw new Error('the root of the project could not be found'); + } + + // keep looking up + return findRootDirectory(parentDir); +} + +const currDirectory = path.resolve('__dirname', '../'); +// get the root directory of the project + +export const RootDirectory = findRootDirectory(currDirectory); +export const DefProjectConfig = path.join(RootDirectory, "project.config.json"); +export const DefPrivateKeyPath = path.join(RootDirectory, "privateKey.txt"); +export const DefGasLimit = 20_000_000; +export const ASPECT_ADDR = "0x0000000000000000000000000000000000A27E14"; + +export function NewWeb3(nodeConfig = DefProjectConfig) { + let node = "" + if (nodeConfig.startsWith("http")) { + node = nodeConfig + } else { + const configJson = JSON.parse(fs.readFileSync(nodeConfig, "utf-8").toString()); + node = configJson.node + } + if (!node) { + throw new Error("'node' cannot be empty, please set by the parameter or artela.config.json"); + } + return new Web3(node) +} + +export function NewAccount(web3) { + const account = web3.eth.accounts.create() + web3.atl.accounts.wallet.add(account.privateKey); + return account +} + +export async function SendTx({ + nodeConfig = DefProjectConfig, + contract = "", + abiPath = "", + method = "", + args = [], + skFile = DefPrivateKeyPath, + gas = DefGasLimit, + value = "" + }) { + // init connection to Artela node + const web3 = NewWeb3(nodeConfig); + + const gasPrice = await web3.eth.getGasPrice(); + + if (!fs.existsSync(skFile)) { + throw new Error("'account' cannot be empty, please set by the parameter ' --skfile ./build/privateKey.txt'") + } + const pk = fs.readFileSync(skFile, 'utf-8'); + const sender = web3.eth.accounts.privateKeyToAccount(pk.trim()); + web3.eth.accounts.wallet.add(sender.privateKey); + + // --contract 0x9999999999999999999999999999999999999999 + if (!contract) { + throw new Error("'contract address' cannot be empty, please set by the parameter ' --contract 0x9999999999999999999999999999999999999999'") + } + + // --abi xxx/xxx.abi + let abi = null + if (abiPath && abiPath !== 'undefined') { + abi = JSON.parse(fs.readFileSync(abiPath, "utf-8").toString()); + } else { + throw new Error("'abi' cannot be empty, please set by the parameter abiPath") + } + + //--method count + if (!method || method === 'undefined') { + throw new Error("'method' cannot be empty, please set by the parameter ' --method {method-name}'") + } + const storageInstance = new web3.eth.Contract(abi, contract); + + const instance = storageInstance.methods[method](...args); + + const tx = { + from: sender.address, + to: contract, + data: instance.encodeABI(), + gasPrice, + gas + } + if (value !== "") { + tx.value = value + } + + const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); + + return await web3.eth.sendSignedTransaction(signedTx.rawTransaction) + .on('receipt', receipt => { + console.log(receipt); + }); +} + + +export async function DeployContract({ + nodeConfig = DefProjectConfig, + abiPath = "", + bytePath = "", + args = [], + skFile = DefPrivateKeyPath, + gas = DefGasLimit + }) { + + const web3 = NewWeb3(nodeConfig); + + const deployParams = { + data: null, + arguments: null, + } + + let byteTxt = fs.readFileSync(bytePath, "utf-8").toString().trim(); + if (!byteTxt) { + throw new Error("bytecode cannot be empty."); + } + if (byteTxt.startsWith("0x")) { + byteTxt = byteTxt.slice(2); + } + if (byteTxt) { + deployParams.data = byteTxt.trim() + } + if (args) { + deployParams.arguments = args + } + + + const abiTxt = fs.readFileSync(abiPath, "utf-8").toString().trim(); + if (!abiTxt) { + throw new Error("'abi' json cannot be empty."); + } + const contractAbi = JSON.parse(abiTxt); + + + // instantiate an instance of demo contract + const tokenContract = new web3.eth.Contract(contractAbi); + + // deploy token contract + const tokenDeploy = tokenContract.deploy(deployParams); + + const pk = fs.readFileSync(skFile, 'utf-8'); + const account = web3.eth.accounts.privateKeyToAccount(pk.trim()); + web3.eth.accounts.wallet.add(account.privateKey); + const nonceVal = await web3.eth.getTransactionCount(account.address); + + const tokenTx = { + from: account.address, + data: tokenDeploy.encodeABI(), + nonce: nonceVal, + gas + } + + const signedTokenTx = await web3.eth.accounts.signTransaction(tokenTx, account.privateKey); + return await web3.eth.sendSignedTransaction(signedTokenTx.rawTransaction); +} \ No newline at end of file diff --git a/packages/testcases/tests/websocket/ws.test.js b/packages/testcases/tests/websocket/ws.test.js new file mode 100644 index 0000000..08655e3 --- /dev/null +++ b/packages/testcases/tests/websocket/ws.test.js @@ -0,0 +1,34 @@ +import web3 from '@artela/web3' +import assert from "assert"; +import {RootDirectory, DeployContract, SendTx} from "../utils/base.js"; + +const ws = new web3("ws://localhost:8546"); +// ws.eth.subscribe('newBlockHeaders', (error, blockHeader) => { +// if (error) return console.error(error); +// console.log('Successfully subscribed!', blockHeader); +// }).on('data', (blockHeader) => { +// console.log('data: ', blockHeader); +// }) + +// const result = await DeployContract({ +// abiPath: RootDirectory + "/build/contract/Store.abi", bytePath: RootDirectory + "/build/contract/Store.bin" +// }) +// assert.ok(result.contractAddress, "Deploy Store Contract fail"); +// console.log("==Deploy Store Contract Result== ", result) + +//send tx +SendTx({ + contract: "0xa8E5A49470805b58F393d4c4784aFC0bc0CadFdb", + abiPath: RootDirectory + "/build/contract/Store.abi", + method: "Storage" +}) +// ws.eth.subscribe('logs', { +// fromBlock: result.blockNumber, +// address: result.contractAddress, +// topics: [] +// }, (error, resultLog) => { +// if (error) return console.error(error); +// console.log('==log=log', resultLog); +// }).on('data', (blockHeader) => { +// console.log('==log=data', blockHeader); +// }) diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index c0adde1..8250344 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-tool", - "version": "0.0.58", + "version": "0.0.59", "description": "Dev tool for aspect to generate libs from solidity storage layout.", "engines": { "node": ">=14" diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 5b19888..c0b507f 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -17,8 +17,8 @@ import { UnbindTmpl } from '../tmpl/scripts/unbind'; const isWinOS = /^win/i.test(process.platform); -const toolVersion = '^0.0.58'; -const libVersion = '^0.0.33'; +const toolVersion = '^0.0.59'; +const libVersion = '^0.0.34'; const web3Version = '^1.9.22'; export default class Init extends Command { @@ -282,8 +282,8 @@ export default class Init extends Command { }; if (!scripts['aspect:build']) { - scripts['asbuild:debug'] = 'asc aspect/index.ts --target debug'; - scripts['asbuild:release'] = 'asc aspect/index.ts --target release'; + scripts['asbuild:debug'] = 'asc aspect/index.ts --target debug --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__'; + scripts['asbuild:release'] = 'asc aspect/index.ts --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__'; scripts['aspect:build'] = 'npm run asbuild:debug && npm run asbuild:release'; pkg['scripts'] = scripts; updated = true; diff --git a/packages/toolkit/src/tmpl/scripts/contract-call.ts b/packages/toolkit/src/tmpl/scripts/contract-call.ts index eecac2c..354b1cf 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-call.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-call.ts @@ -61,10 +61,18 @@ async function call() { } // --args [55] const inputs = argv.args; - let parameters=[]; - if(inputs && inputs!=='undefined') { - parameters =inputs; + let parameters = []; + if (inputs && inputs !== 'undefined') { + for (let i = 0; i < inputs.length; i++) { + const input = inputs[i].trim(); + if (input.startsWith('[') || input.startsWith('{')) { + parameters.push(JSON.parse(input)); + } else { + parameters.push(input); + } + } } + //--method count const method = argv.method; if(!method || method==='undefined') { @@ -73,7 +81,7 @@ async function call() { } let storageInstance = new web3.eth.Contract(abi, contractAddr); let instance = await storageInstance.methods[method](...parameters).call(); - console.log("==== reuslt=== " + instance); + console.log("==== result ====" + instance); } call().then(); diff --git a/packages/toolkit/src/tmpl/scripts/contract-deploy.ts b/packages/toolkit/src/tmpl/scripts/contract-deploy.ts index 8841ae4..112e379 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-deploy.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-deploy.ts @@ -50,10 +50,18 @@ async function deploy() { } deployParams.data = byteTxt.trim() } + // --args [55] const inputs = argv.args; if (inputs && inputs !== 'undefined') { - deployParams.arguments = inputs + for (let i = 0; i < inputs.length; i++) { + const input = inputs[i].trim(); + if (input.startsWith('[') || input.startsWith('{')) { + deployParams.arguments.push(JSON.parse(input)); + } else { + deployParams.arguments.push(input); + } + } } //--abi ./build/contract/xxx.abi diff --git a/packages/toolkit/src/tmpl/scripts/contract-send.ts b/packages/toolkit/src/tmpl/scripts/contract-send.ts index cd5229b..fd36d35 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-send.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-send.ts @@ -65,9 +65,16 @@ async function send() { // --args [55] const inputs = argv.args; - let parameters=[]; - if(inputs && inputs!=='undefined') { - parameters =inputs; + let parameters = []; + if (inputs && inputs !== 'undefined') { + for (let i = 0; i < inputs.length; i++) { + const input = inputs[i].trim(); + if (input.startsWith('[') || input.startsWith('{')) { + parameters.push(JSON.parse(input)); + } else { + parameters.push(input); + } + } } //--method count const method = argv.method; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 757be19..912522f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -19,7 +19,7 @@ importers: version: 7.18.6(@babel/core@7.20.5) '@changesets/changelog-github': specifier: ^0.4.7 - version: 0.4.7 + version: 0.4.7(encoding@0.1.13) '@changesets/cli': specifier: ^2.25.2 version: 2.25.2 @@ -29,6 +29,9 @@ importers: '@theguild/prettier-config': specifier: ^1.0.0 version: 1.0.0(prettier@2.8.2) + assemblyscript: + specifier: ^0.27.23 + version: 0.27.27 babel-jest: specifier: ^29.3.1 version: 29.3.1(@babel/core@7.20.5) @@ -37,7 +40,7 @@ importers: version: 8.31.0 jest: specifier: 29.5.0 - version: 29.5.0 + version: 29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) prettier: specifier: ^2.8.2 version: 2.8.2 @@ -51,24 +54,61 @@ importers: specifier: ^0.27.9 version: 0.27.9 devDependencies: + '@mxssfd/typedoc-theme': + specifier: ^1.1.3 + version: 1.1.3(typedoc@0.25.13(typescript@5.1.6)) as-proto-gen: specifier: ^1.3.0 version: 1.3.0 prettier: specifier: ^2.4.1 version: 2.8.2 + typedoc: + specifier: ^0.25.3 + version: 0.25.13(typescript@5.1.6) - packages/libs-test: + packages/testcases: dependencies: '@artela/aspect-libs': specifier: file:../libs version: file:packages/libs + '@artela/web3': + specifier: 1.9.22 + version: 1.9.22(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) + '@artela/web3-atl': + specifier: 1.9.22 + version: 1.9.22(encoding@0.1.13) + '@artela/web3-eth': + specifier: 1.9.22 + version: 1.9.22(encoding@0.1.13) + '@artela/web3-utils': + specifier: 1.9.22 + version: 1.9.22 + '@assemblyscript/loader': + specifier: ^0.27.5 + version: 0.27.27 + '@ethereumjs/tx': + specifier: ^5.1.0 + version: 5.3.0 as-proto: specifier: ^1.3.0 version: 1.3.0 + bignumber.js: + specifier: ^9.1.2 + version: 9.1.2 + devDependencies: + '@artela/aspect-tool': + specifier: file:../toolkit + version: link:../toolkit + as-proto-gen: + specifier: ^1.3.0 + version: 1.3.0 assemblyscript: - specifier: ^0.27.9 - version: 0.27.9 + specifier: ^0.27.5 + version: 0.27.27 + yargs: + specifier: ^17.7.2 + version: 17.7.2 packages/toolkit: dependencies: @@ -93,7 +133,7 @@ importers: version: 20.3.3 '@typescript-eslint/eslint-plugin': specifier: ^5.59.9 - version: 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@5.1.6) + version: 5.59.11(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6) chai: specifier: ^4 version: 4.0.0 @@ -108,13 +148,13 @@ importers: version: 1.0.3(eslint@8.42.0)(typescript@5.1.6) eslint-config-standard-with-typescript: specifier: ^35.0.0 - version: 35.0.0(@typescript-eslint/eslint-plugin@5.59.11)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.42.0)(typescript@5.1.6) + version: 35.0.0(@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0))(eslint-plugin-n@15.7.0(eslint@8.42.0))(eslint-plugin-promise@6.1.1(eslint@8.42.0))(eslint@8.42.0)(typescript@5.1.6) eslint-import-resolver-alias: specifier: ^1.1.2 - version: 1.1.2(eslint-plugin-import@2.27.5) + version: 1.1.2(eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)) eslint-plugin-import: specifier: ^2.27.5 - version: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint@8.42.0) + version: 2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0) eslint-plugin-n: specifier: ^15.7.0 version: 15.7.0(eslint@8.42.0) @@ -129,7 +169,7 @@ importers: version: 9.0.0 oclif: specifier: ^3.16.0 - version: 3.16.0(@types/node@20.3.3)(typescript@5.1.6) + version: 3.16.0(@types/node@20.3.3)(encoding@0.1.13)(mem-fs@2.3.0)(typescript@5.1.6) shx: specifier: ^0.3.3 version: 0.3.3 @@ -148,137 +188,6479 @@ importers: packages: - /@ampproject/remapping@2.2.1: + '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - dev: true - /@babel/code-frame@7.22.5: + '@artela/aspect-libs@file:packages/libs': + resolution: {directory: packages/libs, type: directory} + + '@artela/web3-atl-aspect@1.9.22': + resolution: {integrity: sha512-8zRRiI6qeDLXf1ayUNtb+E4xn4/RmoIb6gwO2bkUK1/FTdHIlelJb9YJ0N72g/aXmcYoOUYxfAFEBmfvTC+63g==} + engines: {node: '>=8.0.0'} + + '@artela/web3-atl@1.9.22': + resolution: {integrity: sha512-G35nCxa1hgQzPvMVMSxZFQqiV5CTEKg1+HQBW2L9M8UnplvG2Yot4MS3t3j0QHRiv+FFJA2ov7Ie9ioXvofFUQ==} + engines: {node: '>=8.0.0'} + + '@artela/web3-core-method@1.9.22': + resolution: {integrity: sha512-e7iRkhVwV4uXzlLWXAy6vrzjiNHww2sSVLmI6lVfZVLu7HRi33ef5l0voddPrigXPnsBtFgOKIKJerAcc3e4eg==} + engines: {node: '>=8.0.0'} + + '@artela/web3-core@1.9.22': + resolution: {integrity: sha512-viXbTD9ZvXPV+xdNkfT5gQ7HJ38M1DBF/Lv1SoUysIP7CH99hra4G9ogi13B5i+jBKtjTLErD+uLMN7u4vqZqA==} + engines: {node: '>=8.0.0'} + + '@artela/web3-eth-contract@1.9.22': + resolution: {integrity: sha512-dk+NC/AlZtL+iBqMPzQhPTnUE094GDmbU/Q8nEhUaXC6xfC/QEpsEJSUeZeqw26EG8VRl6ve2Nbu080WoOgS/Q==} + engines: {node: '>=8.0.0'} + + '@artela/web3-eth@1.9.22': + resolution: {integrity: sha512-bem9MOtMDf7Zppy9j6Z28jUhjYY95UX+pQzeDPJDedodYMJVdoO7DHc7FEEZOMDlYgagK7vuIFq9GLEWAxBaLg==} + engines: {node: '>=8.0.0'} + + '@artela/web3-utils@1.9.22': + resolution: {integrity: sha512-aE2WtpvmEAPxO7JrJ1lf7nhN2SLm09geIThYrSTYxITB/4GONcOD+0aY8y0G5WzFQAz9jF4wfhSAdj4+uIMDKQ==} + engines: {node: '>=8.0.0'} + + '@artela/web3@1.9.22': + resolution: {integrity: sha512-gyO0uiwEEEw+/IV1Lw14rUeOf9el54rpuK8gP44tnHXbK0D4EzwpO/944Pah+foJvsHu+AL3+b4sd8zN51e5KQ==} + engines: {node: '>=8.0.0'} + + '@assemblyscript/loader@0.27.27': + resolution: {integrity: sha512-zeAM5zx4CT9shQuES+4UNfLVzlmkRrY9W1LujuEhS1xI/qcHr3BsU4SAOylR4D2lsRjhwcdqNEZkph/zA7+5Vg==} + + '@babel/code-frame@7.22.5': resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.22.5 - dev: true - /@babel/compat-data@7.22.5: + '@babel/compat-data@7.22.5': resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} engines: {node: '>=6.9.0'} - dev: true - /@babel/core@7.20.5: + '@babel/core@7.20.5': resolution: {integrity: sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.5 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.20.5) - '@babel/helper-module-transforms': 7.22.5 - '@babel/helpers': 7.22.5 - '@babel/parser': 7.22.5 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.5 - '@babel/types': 7.22.5 - convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/eslint-parser@7.22.5(@babel/core@7.20.5)(eslint@8.42.0): + '@babel/eslint-parser@7.22.5': resolution: {integrity: sha512-C69RWYNYtrgIRE5CmTd77ZiLDXqgBipahJc/jHP3sLcAGj6AJzxNIuKNpVnICqbyK7X3pFUfEvL++rvtbQpZkQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': '>=7.11.0' eslint: ^7.5.0 || ^8.0.0 - dependencies: - '@babel/core': 7.20.5 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.42.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.0 - dev: true - /@babel/generator@7.22.5: + '@babel/generator@7.22.5': resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 - jsesc: 2.5.2 - dev: true - /@babel/helper-annotate-as-pure@7.22.5: + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.22.5 - dev: true - /@babel/helper-compilation-targets@7.22.5(@babel/core@7.20.5): + '@babel/helper-compilation-targets@7.22.5': resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.22.5 - '@babel/core': 7.20.5 - '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.9 - lru-cache: 5.1.1 - semver: 6.3.0 - dev: true - /@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.20.5): + '@babel/helper-create-class-features-plugin@7.22.5': resolution: {integrity: sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.20.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.5 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.20.5): + '@babel/helper-create-regexp-features-plugin@7.22.5': resolution: {integrity: sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.3.3': + resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} + peerDependencies: + '@babel/core': ^7.4.0-0 + + '@babel/helper-environment-visitor@7.22.5': + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.22.5': + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.22.5': + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.22.5': + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.22.5': + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.22.5': + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-optimise-call-expression@7.22.5': + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.22.5': + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.22.5': + resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.22.5': + resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.22.5': + resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.22.5': + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.22.5': + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.22.5': + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.22.5': + resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.22.5': + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.22.5': + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.22.5': + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5': + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5': + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-proposal-async-generator-functions@7.20.7': + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-class-properties@7.18.6': + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-class-static-block@7.21.0': + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-proposal-dynamic-import@7.18.6': + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-export-namespace-from@7.18.9': + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-json-strings@7.18.6': + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-logical-assignment-operators@7.20.7': + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-numeric-separator@7.18.6': + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-object-rest-spread@7.20.7': + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-optional-catch-binding@7.18.6': + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-optional-chaining@7.21.0': + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.11': + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-unicode-property-regex@7.18.6': + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-dynamic-import@7.8.3': + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-export-namespace-from@7.8.3': + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.22.5': + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.22.5': + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.22.5': + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-arrow-functions@7.22.5': + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.22.5': + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.22.5': + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.22.5': + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-classes@7.22.5': + resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.22.5': + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.22.5': + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.22.5': + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.22.5': + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.22.5': + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.22.5': + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.22.5': + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.22.5': + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.22.5': + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.22.5': + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.22.5': + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.22.5': + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.22.5': + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.22.5': + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.22.5': + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.22.5': + resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.22.5': + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.22.5': + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.22.5': + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-reserved-words@7.22.5': + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.22.5': + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.22.5': + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.22.5': + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.22.5': + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.22.5': + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.22.5': + resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.22.5': + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.22.5': + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-env@7.20.2': + resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.5': + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.18.6': + resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/regjsgen@0.8.0': + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + + '@babel/runtime@7.22.5': + resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.22.5': + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.22.5': + resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.22.5': + resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@changesets/apply-release-plan@6.1.3': + resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} + + '@changesets/assemble-release-plan@5.2.3': + resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==} + + '@changesets/changelog-git@0.1.14': + resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + + '@changesets/changelog-github@0.4.7': + resolution: {integrity: sha512-UUG5sKwShs5ha1GFnayUpZNcDGWoY7F5XxhOEHS62sDPOtoHQZsG3j1nC5RxZ3M1URHA321cwVZHeXgu99Y3ew==} + + '@changesets/cli@2.25.2': + resolution: {integrity: sha512-ACScBJXI3kRyMd2R8n8SzfttDHi4tmKSwVwXBazJOylQItSRSF4cGmej2E4FVf/eNfGy6THkL9GzAahU9ErZrA==} + hasBin: true + + '@changesets/config@2.3.0': + resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==} + + '@changesets/errors@0.1.4': + resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + + '@changesets/get-dependents-graph@1.3.5': + resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==} + + '@changesets/get-github-info@0.5.2': + resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} + + '@changesets/get-release-plan@3.0.16': + resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==} + + '@changesets/get-version-range-type@0.3.2': + resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + + '@changesets/git@1.5.0': + resolution: {integrity: sha512-Xo8AT2G7rQJSwV87c8PwMm6BAc98BnufRMsML7m7Iw8Or18WFvFmxqG5aOL5PBvhgq9KrKvaeIBNIymracSuHg==} + + '@changesets/git@2.0.0': + resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + + '@changesets/logger@0.0.5': + resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + + '@changesets/parse@0.3.16': + resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + + '@changesets/pre@1.0.14': + resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + + '@changesets/read@0.5.9': + resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@5.2.1': + resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} + + '@changesets/write@0.2.3': + resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.5.1': + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@1.4.1': + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/eslintrc@2.0.3': + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.42.0': + resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@ethereumjs/common@2.5.0': + resolution: {integrity: sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==} + + '@ethereumjs/common@4.3.0': + resolution: {integrity: sha512-shBNJ0ewcPNTUfZduHiczPmqkfJDn0Dh/9BR5fq7xUFTuIq7Fu1Vx00XDwQVIrpVL70oycZocOhBM6nDO+4FEQ==} + + '@ethereumjs/rlp@5.0.2': + resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} + engines: {node: '>=18'} + hasBin: true + + '@ethereumjs/tx@3.3.2': + resolution: {integrity: sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==} + + '@ethereumjs/tx@5.3.0': + resolution: {integrity: sha512-uv++XYuIfuqYbvymL3/o14hHuC6zX0nRQ1nI2FHsbkkorLZ2ChEIDqVeeVk7Xc9/jQNU/22sk9qZZkRlsveXxw==} + engines: {node: '>=18'} + + '@ethereumjs/util@9.0.3': + resolution: {integrity: sha512-PmwzWDflky+7jlZIFqiGsBPap12tk9zK5SVH9YW2OEnDN7OEhCjUOMzbOqwuClrbkSIkM2ERivd7sXZ48Rh/vg==} + engines: {node: '>=18'} + + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@humanwhocodes/config-array@0.11.10': + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@1.2.1': + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/string-locale-compare@1.1.0': + resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.5.0': + resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.5.0': + resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.5.0': + resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.5.0': + resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.5.0': + resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.5.0': + resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.5.0': + resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.5.0': + resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.4.3': + resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.4.3': + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.5.0': + resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.5.0': + resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.5.0': + resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.5.0': + resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.3': + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.0': + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.1.2': + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.14': + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.18': + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@manypkg/find-root@1.1.0': + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + + '@manypkg/get-packages@1.1.3': + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + + '@mxssfd/typedoc-theme@1.1.3': + resolution: {integrity: sha512-/yP5rqhvibMpzXpmw0YLLRCpoj3uVWWlwyJseZXzGxTfiA6/fd1uubUqNoQAi2U19atMDonq8mQc+hlVctrX4g==} + engines: {node: '>= 14'} + peerDependencies: + typedoc: ^0.25.1 + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + + '@noble/curves@1.3.0': + resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/arborist@4.3.1': + resolution: {integrity: sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + hasBin: true + + '@npmcli/config@6.2.0': + resolution: {integrity: sha512-lPAPNVUvlv6x0uwGiKzuWVUy1WSBaK5P0t9PoQQVIAbc1RaJLkaNxyUQZOrFJ7Y/ShzLw5skzruThhD9Qcju/A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/fs@1.1.1': + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/fs@3.1.0': + resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/git@2.1.0': + resolution: {integrity: sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==} + + '@npmcli/git@4.1.0': + resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/installed-package-contents@1.0.7': + resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} + engines: {node: '>= 10'} + hasBin: true + + '@npmcli/installed-package-contents@2.0.2': + resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + '@npmcli/map-workspaces@2.0.4': + resolution: {integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/map-workspaces@3.0.4': + resolution: {integrity: sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/metavuln-calculator@2.0.0': + resolution: {integrity: sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + + '@npmcli/move-file@1.1.2': + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + + '@npmcli/name-from-folder@1.0.1': + resolution: {integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==} + + '@npmcli/name-from-folder@2.0.0': + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/node-gyp@1.0.3': + resolution: {integrity: sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==} + + '@npmcli/node-gyp@3.0.0': + resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/package-json@1.0.1': + resolution: {integrity: sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==} + + '@npmcli/promise-spawn@1.3.2': + resolution: {integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==} + + '@npmcli/promise-spawn@6.0.2': + resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@npmcli/run-script@2.0.0': + resolution: {integrity: sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==} + + '@npmcli/run-script@6.0.2': + resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@oclif/core@2.15.0': + resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} + engines: {node: '>=14.0.0'} + + '@oclif/core@2.8.11': + resolution: {integrity: sha512-9wYW6KRSWfB/D+tqeyl/jxmEz/xPXkFJGVWfKaptqHz6FPWNJREjAM945MuJL2Y8NRhMe+ScRlZ3WpdToX5aVQ==} + engines: {node: '>=14.0.0'} + + '@oclif/core@2.8.8': + resolution: {integrity: sha512-21U+WDgyb/xnefx9DWZhBHj5TlloZZiA1dVAE1Y8FGSAJwdArI4HqaNgp99BcyuaeX5XOz1tPeXoeB/j8uADcQ==} + engines: {node: '>=14.0.0'} + + '@oclif/plugin-help@5.2.19': + resolution: {integrity: sha512-gf6/dFtzMJ8RA4ovlBCBGJsZsd4jPXhYWJho+Gh6KmA+Ev9LupoExbE0qT+a2uHJyHEvIg4uX/MBW3qdERD/8g==} + engines: {node: '>=12.0.0'} + + '@oclif/plugin-not-found@2.4.1': + resolution: {integrity: sha512-LqW7qpw5Q8ploRiup2jEIMQJXcxHP1tpwj45GApKQMe7GRdGdRdjBT9Tu+U2tdEgMqgMplAIhOsYCx2nc2nMSw==} + engines: {node: '>=12.0.0'} + + '@oclif/plugin-warn-if-update-available@2.1.0': + resolution: {integrity: sha512-liTWd/qSIqALsikr88CAB9o2xGFt0LdT5REbhxtrx16/trRmkxQ+0RHK1FieGZAzEENx/4D3YcC/Y67a0uyO0g==} + engines: {node: '>=12.0.0'} + + '@oclif/test@2.3.26': + resolution: {integrity: sha512-oGvfgtreGcr5EIOGHv00PKO3eGpyJt2G6kqzuCH9NkJq4c/RngOmG8DEk/wXRN0gb3Y8AH+bQ6edJcW5/3jwKQ==} + engines: {node: '>=12.0.0'} + + '@octokit/auth-token@2.5.0': + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + + '@octokit/core@3.6.0': + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + + '@octokit/endpoint@6.0.12': + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + + '@octokit/graphql@4.8.0': + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + + '@octokit/openapi-types@12.11.0': + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + + '@octokit/plugin-paginate-rest@2.21.3': + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' + + '@octokit/plugin-request-log@1.0.4': + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-rest-endpoint-methods@5.16.2': + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/request-error@2.1.0': + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + + '@octokit/request@5.6.3': + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + + '@octokit/rest@18.12.0': + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + + '@octokit/types@6.41.0': + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/utils@2.4.1': + resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rushstack/eslint-patch@1.3.2': + resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==} + + '@scure/base@1.1.6': + resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + + '@scure/bip32@1.3.3': + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + + '@scure/bip39@1.2.2': + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + + '@sigstore/protobuf-specs@0.1.0': + resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@sigstore/tuf@1.0.0': + resolution: {integrity: sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@sinclair/typebox@0.25.24': + resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} + + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sinonjs/commons@3.0.0': + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + + '@sinonjs/fake-timers@10.1.0': + resolution: {integrity: sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==} + + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@theguild/eslint-config@0.9.0': + resolution: {integrity: sha512-rPYiVcAxT2j75wUm7nVrFw6oCpSdgFsS3PtVXfWKBhBb3JHSv2249t5SVPkvJKD3WRiVl4952KI5lh9tHT6JBg==} + peerDependencies: + eslint: ^8.24.0 + + '@theguild/prettier-config@1.0.0': + resolution: {integrity: sha512-EdPbtrXN1Z0QqmFJZXGj4n/xLZTCJtDxb+jeNGmOccrv0cJTB46d+lsvCO8j7SmuUhyt/gv9B6nnVKt66D2X1w==} + peerDependencies: + prettier: ^2 + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tsconfig/node10@1.0.9': + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tufjs/canonical-json@1.0.0': + resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@tufjs/models@1.0.4': + resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + '@types/acorn@4.0.6': + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + + '@types/babel__core@7.20.1': + resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + + '@types/babel__generator@7.6.4': + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + + '@types/babel__template@7.4.1': + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + + '@types/babel__traverse@7.20.1': + resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + + '@types/chai@4.0.0': + resolution: {integrity: sha512-B56eI1x+Av9A7XHsgF0+WyLyBytAQqvdBoaULY3c4TGeKwLm43myB78EeBA8/VQn74KblXM4/ecmjTJJXUUF1A==} + + '@types/cli-progress@3.11.0': + resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} + + '@types/concat-stream@2.0.0': + resolution: {integrity: sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==} + + '@types/debug@4.1.8': + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + + '@types/estree-jsx@1.0.0': + resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} + + '@types/estree@1.0.1': + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + + '@types/expect@1.20.4': + resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} + + '@types/graceful-fs@4.1.6': + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + + '@types/hast@2.3.4': + resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + + '@types/http-cache-semantics@4.0.1': + resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} + + '@types/humps@2.0.2': + resolution: {integrity: sha512-FuyQoVNSW6mjSLxLVRq8YK1pi8P5zyL2pahEuCtMqlbmV4jyWYITz4eE2fZIErNovIfKU32tPbCl44VbOUaEiw==} + + '@types/is-ci@3.0.0': + resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + + '@types/is-empty@1.2.1': + resolution: {integrity: sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==} + + '@types/istanbul-lib-coverage@2.0.4': + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + + '@types/istanbul-lib-report@3.0.0': + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + + '@types/istanbul-reports@3.0.1': + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + + '@types/json-schema@7.0.12': + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/lodash@4.14.195': + resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} + + '@types/mdast@3.0.11': + resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} + + '@types/minimatch@3.0.5': + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + '@types/minimist@1.2.2': + resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + + '@types/mocha@9.0.0': + resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} + + '@types/ms@0.7.31': + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + + '@types/node@12.20.55': + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + + '@types/node@15.14.9': + resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} + + '@types/node@18.16.18': + resolution: {integrity: sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==} + + '@types/node@20.3.3': + resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} + + '@types/normalize-package-data@2.4.1': + resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + + '@types/pbkdf2@3.1.2': + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + + '@types/responselike@1.0.0': + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + + '@types/secp256k1@4.0.6': + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + + '@types/semver@6.2.3': + resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} + + '@types/semver@7.5.0': + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + + '@types/sinon@10.0.15': + resolution: {integrity: sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==} + + '@types/sinonjs__fake-timers@8.1.2': + resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} + + '@types/stack-utils@2.0.1': + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + + '@types/supports-color@8.1.1': + resolution: {integrity: sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==} + + '@types/unist@2.0.6': + resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} + + '@types/vinyl@2.0.7': + resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} + + '@types/yargs-parser@21.0.0': + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + + '@types/yargs@17.0.24': + resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + + '@typescript-eslint/eslint-plugin@4.33.0': + resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/parser': ^4.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@5.59.11': + resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/experimental-utils@4.33.0': + resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' + + '@typescript-eslint/parser@4.33.0': + resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@5.59.11': + resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@4.33.0': + resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + + '@typescript-eslint/scope-manager@5.59.11': + resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/type-utils@5.59.11': + resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@4.33.0': + resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + + '@typescript-eslint/types@5.59.11': + resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/typescript-estree@4.33.0': + resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@5.59.11': + resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.59.11': + resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@4.33.0': + resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + + '@typescript-eslint/visitor-keys@5.59.11': + resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@ungap/promise-all-settled@1.1.2': + resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + abbrev@2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abortcontroller-polyfill@1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + + acorn@8.9.0: + resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agentkeepalive@4.3.0: + resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-colors@4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-sequence-parser@1.1.1: + resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + ansicolors@0.3.2: + resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.2.1: + resolution: {integrity: sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==} + + array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + + array-differ@3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-includes@3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.flat@1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.1: + resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + + as-proto-gen@1.3.0: + resolution: {integrity: sha512-dHuDXVq9CXpvCA+jJqN4fmH3fKrRfV/voQkKRUP6qUAGEvYRPkujuN4PgGqRn1VoiFnR0EWqgr8Vsk7oa0EexA==} + hasBin: true + + as-proto@1.3.0: + resolution: {integrity: sha512-Lo3x+OHMScDUX7I3meKf8tNUrMffLIZp6S7bhkbZPEVK9F2uLhoYcUHnYLjNLjmk7SOyofGtiGFJ7SmAwVMwAg==} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assemblyscript@0.27.27: + resolution: {integrity: sha512-z4ijXsjjk3uespEeCWpO1K2GQySc6bn+LL5dL0tsC2VXNYKFnKDmAh3wefcKazxXHFVhYlxqNfyv96ajaQyINQ==} + engines: {node: '>=16', npm: '>=7'} + hasBin: true + + assemblyscript@0.27.9: + resolution: {integrity: sha512-cFE/AMjVtBQ2iKFZPu/a3Z/KJzGex61C+X+y3GuLJ8Hr9Zdf46sy/JlIl6ikothQd2umM9CQDAD/uAPAEHL+oA==} + engines: {node: '>=16', npm: '>=7'} + hasBin: true + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + ast-types-flow@0.0.7: + resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-limiter@1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + aws-sdk@2.1408.0: + resolution: {integrity: sha512-goz0xgpRVm4pH89CSUvw2S4ed+XTnGF9/2x/nE3Rl6JEHiiz9wz430RhESTo6AbDTXrONUOUcwwG+U0G2ev7ow==} + engines: {node: '>= 10.0.0'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + + axe-core@4.7.2: + resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} + engines: {node: '>=4'} + + axobject-query@3.2.1: + resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + + babel-jest@29.3.1: + resolution: {integrity: sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-jest@29.5.0: + resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.5.0: + resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-polyfill-corejs2@0.3.3: + resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + babel-plugin-polyfill-corejs3@0.6.0: + resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + babel-plugin-polyfill-regenerator@0.4.1: + resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.5.0: + resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.9: + resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + better-path-resolve@1.0.0: + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + engines: {node: '>=4'} + + big-integer@1.6.51: + resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} + engines: {node: '>=0.6'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + bin-links@3.0.3: + resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + binaryen@112.0.0-nightly.20230411: + resolution: {integrity: sha512-4V9r9x9fjAVFZdR2yvBFc3BEJJIBYvd2X8X8k0zAuJsao2gl9wNHDmpQ30QsLo6hgkRfRImkCbCjhXW3RDOYXQ==} + hasBin: true + + binaryen@116.0.0-nightly.20240114: + resolution: {integrity: sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==} + hasBin: true + + binaryextensions@4.18.0: + resolution: {integrity: sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==} + engines: {node: '>=0.8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bplist-parser@0.2.0: + resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} + engines: {node: '>= 5.10.0'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + breakword@1.0.6: + resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-to-arraybuffer@0.0.5: + resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + bufferutil@4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + builtins@1.0.3: + resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} + + builtins@5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + + bundle-name@3.0.0: + resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} + engines: {node: '>=12'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + cacache@17.1.3: + resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-lookup@6.1.0: + resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase-keys@6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001504: + resolution: {integrity: sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==} + + cardinal@2.1.1: + resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} + hasBin: true + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + + chai@4.0.0: + resolution: {integrity: sha512-FQdXBx+UlDU1RljcWV3/ha2Mm+ooF9IQApHXZA1Az+XYItNtzYPR7e1Ga6WwjTkhCPrE6WhvaCU6b4ljGKbgoQ==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + + character-entities@1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + + character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + + character-reference-invalid@1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + + character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + check-error@1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + + chokidar@3.5.1: + resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + + cids@0.7.5: + resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} + engines: {node: '>=4.0.0', npm: '>=3.0.0'} + deprecated: This module has been superseded by the multiformats module + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + + class-is@1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + + cli-spinners@2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + engines: {node: '>=6'} + + cli-table@0.3.11: + resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} + engines: {node: '>= 0.2.0'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-buffer@1.0.0: + resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} + engines: {node: '>= 0.10'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone-stats@1.0.0: + resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + cloneable-readable@1.1.3: + resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} + + cmd-shim@5.0.0: + resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.1: + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + colors@1.0.3: + resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@7.1.0: + resolution: {integrity: sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==} + engines: {node: '>= 10'} + + common-ancestor-path@1.0.1: + resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + concurrently@7.6.0: + resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} + engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} + hasBin: true + + confusing-browser-globals@1.0.10: + resolution: {integrity: sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-hash@2.5.2: + resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + core-js-compat@3.31.0: + resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-fetch@3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + + cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + + cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + csv-generate@3.4.3: + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + + csv-parse@4.16.3: + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + + csv-stringify@5.6.5: + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + + csv@5.5.3: + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + engines: {node: '>= 0.1.90'} + + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + dargs@7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + dataloader@1.4.0: + resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + + dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.1: + resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debuglog@1.0.1: + resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + decamelize-keys@1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + decompress-response@3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + deep-eql@2.0.2: + resolution: {integrity: sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==} + engines: {node: '>=0.12'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@3.0.0: + resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} + engines: {node: '>=12'} + + default-browser@4.0.0: + resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} + engines: {node: '>=14.16'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-indent@6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diff-sequences@29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + + diff@5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.4.433: + resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.5.5: + resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.15.0: + resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + engines: {node: '>=10.13.0'} + + enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error@10.4.0: + resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} + + es-abstract@1.21.2: + resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-oclif-typescript@1.0.3: + resolution: {integrity: sha512-TeJKXWBQ3uKMtzgz++UFNWpe1WCx8mfqRuzZy1LirREgRlVv656SkVG4gNZat5rRNIQgfDmTS+YebxK02kfylA==} + engines: {node: '>=12.0.0'} + + eslint-config-oclif@4.0.0: + resolution: {integrity: sha512-5tkUQeC33rHAhJxaGeBGYIflDLumeV2qD/4XLBdXhB/6F/+Jnwdce9wYHSvkx0JUqUQShpQv8JEVkBp/zzD7hg==} + engines: {node: '>=12.0.0'} + + eslint-config-prettier@8.8.0: + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-config-standard-with-typescript@35.0.0: + resolution: {integrity: sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.50.0 + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + typescript: '*' + + eslint-config-standard@17.0.0: + resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + + eslint-config-xo-space@0.27.0: + resolution: {integrity: sha512-b8UjW+nQyOkhiANVpIptqlKPyE7XRyQ40uQ1NoBhzVfu95gxfZGrpliq8ZHBpaOF2wCLZaexTSjg7Rvm99vj4A==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.20.0' + + eslint-config-xo-space@0.29.0: + resolution: {integrity: sha512-emUZVHjmzl3I1aO2M/2gEpqa/GHXTl7LF/vQeAX4W+mQIU+2kyqY97FkMnSc2J8Osoq+vCSXCY/HjFUmFIF/Ag==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.32.0' + + eslint-config-xo@0.35.0: + resolution: {integrity: sha512-+WyZTLWUJlvExFrBU/Ldw8AB/S0d3x+26JQdBWbcqig2ZaWh0zinYcHok+ET4IoPaEcRRf3FE9kjItNVjBwnAg==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.20.0' + + eslint-config-xo@0.38.0: + resolution: {integrity: sha512-G2jL+VyfkcZW8GoTmqLsExvrWssBedSoaQQ11vyhflDeT3csMdBVp0On+AVijrRuvgmkWeDwwUL5Rj0qDRHK6g==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.20.0' + + eslint-import-resolver-alias@1.1.2: + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + + eslint-import-resolver-node@0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + + eslint-import-resolver-typescript@3.5.5: + resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + + eslint-mdx@2.1.0: + resolution: {integrity: sha512-dVLHDcpCFJRXZhxEQx8nKc68KT1qm+9JOeMD+j1/WW2h+oco1j7Qq+CLrX2kP64LI3fF9TUtj7a0AvncHUME6w==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8.0.0' + + eslint-module-utils@2.8.0: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-es@3.0.1: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-es@4.1.0: + resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-import@2.27.5: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jsonc@2.9.0: + resolution: {integrity: sha512-RK+LeONVukbLwT2+t7/OY54NJRccTXh/QbnXzPuTLpFMVZhPuq1C9E07+qWenGx7rrQl0kAalAWl7EmB+RjpGA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-plugin-jsx-a11y@6.7.1: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-markdown@3.0.0: + resolution: {integrity: sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + eslint-plugin-mdx@2.1.0: + resolution: {integrity: sha512-Q8P1JXv+OrD+xhWT95ZyV30MMdnqJ1voKtXfxWrJJ2XihJRI15gPmXbIWY9t8CjA8C//isfzNOmnVY9e3GTL0g==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=8.0.0' + + eslint-plugin-mocha@9.0.0: + resolution: {integrity: sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-n@15.7.0: + resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} + engines: {node: '>=12.22.0'} + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-node@11.1.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + + eslint-plugin-promise@6.1.1: + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + eslint-plugin-react-hooks@4.6.0: + resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react@7.32.2: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + + eslint-plugin-sonarjs@0.19.0: + resolution: {integrity: sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==} + engines: {node: '>=14'} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + + eslint-plugin-typescript@0.14.0: + resolution: {integrity: sha512-2u1WnnDF2mkWWgU1lFQ2RjypUlmRoBEvQN02y9u+IL12mjWlkKFGEBnVsjs9Y8190bfPQCvWly1c2rYYUSOxWw==} + engines: {node: '>=6'} + deprecated: 'Deprecated: Use @typescript-eslint/eslint-plugin instead' + + eslint-plugin-unicorn@36.0.0: + resolution: {integrity: sha512-xxN2vSctGWnDW6aLElm/LKIwcrmk6mdiEcW55Uv5krcrVcIFSWMmEgc/hwpemYfZacKZ5npFERGNz4aThsp1AA==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=7.32.0' + + eslint-plugin-unicorn@46.0.1: + resolution: {integrity: sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==} + engines: {node: '>=14.18'} + peerDependencies: + eslint: '>=8.28.0' + + eslint-plugin-yml@1.8.0: + resolution: {integrity: sha512-fgBiJvXD0P2IN7SARDJ2J7mx8t0bLdG6Zcig4ufOqW5hOvSiFxeUyc2g5I1uIm8AExbo26NNYCcTGZT0MXTsyg==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-template-visitor@2.3.2: + resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==} + peerDependencies: + eslint: '>=7.0.0' + + eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + + eslint-utils@3.0.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + + eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + + eslint-visitor-keys@3.4.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.31.0: + resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + eslint@8.42.0: + resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + + espree@9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} + + estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eth-ens-namehash@2.0.8: + resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} + + eth-lib@0.1.29: + resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} + + eth-lib@0.2.8: + resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} + + ethereum-bloom-filters@1.1.0: + resolution: {integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==} + + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + + ethereum-cryptography@2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + + ethjs-unit@0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + events@1.1.1: + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.5.0: + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + + express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + extendable-error@0.1.7: + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fancy-test@2.0.28: + resolution: {integrity: sha512-UjTjYRlfdUEkvjIMKZlpqALjkgC3GzjUgWDg9KRv/ulxIqppvQUWMt5mOUmqlrSRlGF/Wj7HyFkWKzz5RujpFg==} + engines: {node: '>=12.0.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-yarn-workspace-root2@1.2.16: + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + + find-yarn-workspace-root@2.0.0: + resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + + first-chunk-stream@2.0.0: + resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==} + engines: {node: '>=0.10.0'} + + flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data-encoder@1.7.1: + resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@1.2.7: + resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.2: + resolution: {integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + + function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + + get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.6.0: + resolution: {integrity: sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + + github-username@6.0.0: + resolution: {integrity: sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==} + engines: {node: '>=10'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.1: + resolution: {integrity: sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + + globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.0: + resolution: {integrity: sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + google-protobuf@3.21.2: + resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + got@12.1.0: + resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} + engines: {node: '>=14.16'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + grapheme-splitter@1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + grouped-queue@2.0.0: + resolution: {integrity: sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw==} + engines: {node: '>=8.0.0'} + + growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + + hard-rejection@2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + + has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + has@1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + hosted-git-info@6.1.1: + resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-call@5.3.0: + resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} + engines: {node: '>=8.0.0'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-https@1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + human-id@1.0.2: + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + humps@2.0.1: + resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} + + hyperlinker@1.0.0: + resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} + engines: {node: '>=4'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + idna-uts46-hx@2.3.1: + resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} + engines: {node: '>=4.0.0'} + + ieee754@1.1.13: + resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@4.0.1: + resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} + engines: {node: '>=10'} + + ignore-walk@6.0.3: + resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + import-meta-resolve@2.2.2: + resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + inquirer@8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} + engines: {node: '>=12.0.0'} + + internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ip@2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + + is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + + is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + + is-core-module@2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + + is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-retry-allowed@1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + + is-scoped@2.1.0: + resolution: {integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==} + engines: {node: '>=8'} + + is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-subdir@1.2.0: + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + engines: {node: '>=4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-utf8@0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.0: + resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} + engines: {node: '>= 14.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + istanbul-lib-coverage@3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.0: + resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} + engines: {node: '>=8'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} + engines: {node: '>=8'} + + jackspeak@2.2.1: + resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} + engines: {node: '>=14'} + + jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.5.0: + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.5.0: + resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.5.0: + resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.5.0: + resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.5.0: + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.5.0: + resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.5.0: + resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.4.3: + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.5.0: + resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.5.0: + resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.5.0: + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.5.0: + resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.5.0: + resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.4.3: + resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.5.0: + resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.5.0: + resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.5.0: + resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.5.0: + resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.5.0: + resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.5.0: + resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.5.0: + resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.5.0: + resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.5.0: + resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.5.0: + resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + + js-sdsl@4.4.1: + resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} + + js-sha3@0.5.7: + resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@3.0.0: + resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-nice@1.1.4: + resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-eslint-parser@2.3.0: + resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + + jsx-ast-utils@3.3.3: + resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} + engines: {node: '>=4.0'} + + just-diff-apply@5.5.0: + resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} + + just-diff@5.2.0: + resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + keyv@4.5.2: + resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + language-subtag-registry@0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} + + language-tags@1.0.5: + resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lines-and-columns@2.0.3: + resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + load-plugin@5.1.0: + resolution: {integrity: sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==} + + load-yaml-file@0.2.0: + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + engines: {node: '>=6'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash._reinterpolate@3.0.0: + resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.template@4.5.0: + resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + + lodash.templatesettings@4.2.0: + resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + + lodash.unescape@4.0.1: + resolution: {integrity: sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} + engines: {node: 14 || >=16.14} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + make-fetch-happen@11.1.1: + resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-obj@1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + + map-obj@4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + + mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + + mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + + mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + + mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + + mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + + mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + + mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + + mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + + mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + mem-fs-editor@9.7.0: + resolution: {integrity: sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg==} + engines: {node: '>=12.10.0'} + peerDependencies: + mem-fs: ^2.1.0 + peerDependenciesMeta: + mem-fs: + optional: true + + mem-fs@2.3.0: + resolution: {integrity: sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw==} + engines: {node: '>=12'} + + meow@6.1.1: + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + engines: {node: '>=8'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + + micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + + micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + + micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + + micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + + micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + + micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + + micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + + micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + + micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + + micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + + micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + + micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + + micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + + micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + + micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + + micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + + micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + + micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + + micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + + micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + + micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + + micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + + micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + + micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + + micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + + micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + + micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + + micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + + minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist-options@4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + minipass-fetch@3.0.3: + resolution: {integrity: sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-json-stream@1.0.1: + resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@2.9.0: + resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@6.0.2: + resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@1.3.3: + resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mixme@0.5.9: + resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} + engines: {node: '>= 8.0.0'} + + mkdirp-infer-owner@2.0.0: + resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} + engines: {node: '>=10'} + + mkdirp-promise@5.0.1: + resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} + engines: {node: '>=4'} + deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mocha@9.0.0: + resolution: {integrity: sha512-GRGG/q9bIaUkHJB9NL+KZNjDhMBHB30zW3bZW9qOiYr+QChyLjPzswaxFWkI1q6lGlSL28EQYzAi2vKWNkPx+g==} + engines: {node: '>= 12.0.0'} + hasBin: true + + mock-fs@4.14.0: + resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} + + mock-stdin@1.0.0: + resolution: {integrity: sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==} + + mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multibase@0.6.1: + resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} + deprecated: This module has been superseded by the multiformats module + + multibase@0.7.0: + resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} + deprecated: This module has been superseded by the multiformats module + + multicodec@0.5.7: + resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} + deprecated: This module has been superseded by the multiformats module + + multicodec@1.0.4: + resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} + deprecated: This module has been superseded by the multiformats module + + multihashes@0.4.21: + resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} + + multimap@1.1.0: + resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} + + multimatch@5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mvdan-sh@0.10.1: + resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} + + nano-json-stream-parser@0.1.2: + resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} + + nanoid@3.1.23: + resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + natural-orderby@2.0.3: + resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + nock@13.3.1: + resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} + engines: {node: '>= 10.13'} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-fetch@2.6.11: + resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.0: + resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + hasBin: true + + node-gyp@8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + + node-gyp@9.4.0: + resolution: {integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + nopt@7.2.0: + resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-package-data@3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + + normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-bundled@1.1.2: + resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + + npm-bundled@3.0.0: + resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-install-checks@4.0.0: + resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} + engines: {node: '>=10'} + + npm-install-checks@6.1.1: + resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-normalize-package-bin@1.0.1: + resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} + + npm-normalize-package-bin@2.0.0: + resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-package-arg@8.1.5: + resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} + engines: {node: '>=10'} + + npm-packlist@3.0.0: + resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} + engines: {node: '>=10'} + hasBin: true + + npm-packlist@7.0.4: + resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-pick-manifest@6.1.1: + resolution: {integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==} + + npm-pick-manifest@8.0.1: + resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-registry-fetch@12.0.2: + resolution: {integrity: sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + + npm-registry-fetch@14.0.5: + resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + number-to-bn@1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-treeify@1.1.33: + resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} + engines: {node: '>= 10'} + + object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.6: + resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.6: + resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} + engines: {node: '>= 0.4'} + + object.hasown@1.1.2: + resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + + object.values@1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} + engines: {node: '>= 0.4'} + + oboe@2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + + oclif@3.16.0: + resolution: {integrity: sha512-qbPJ9SifBDPeMnuYIyJc0+kGyXmLubJs/lOD1wjrvAiKqTWQ1xy/EFlNMgBGETCf7RQf1iSJmvf+s22ZkLc7Ow==} + engines: {node: '>=12.0.0'} + hasBin: true + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + open@9.1.0: + resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} + engines: {node: '>=14.16'} + + optionator@0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + outdent@0.5.0: + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + + p-filter@2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-transform@1.3.0: + resolution: {integrity: sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==} + engines: {node: '>=12.10.0'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pacote@12.0.3: + resolution: {integrity: sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16} + hasBin: true + + pacote@15.2.0: + resolution: {integrity: sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-conflict-json@2.0.2: + resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + + parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + + parse-headers@2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-json@6.0.2: + resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + password-prompt@1.1.2: + resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.10.0: + resolution: {integrity: sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==} + engines: {node: '>=16 || 14 >=14.17'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pirates@4.0.5: + resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + preferred-pm@3.0.3: + resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + engines: {node: '>=10'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-pkg@0.17.1: + resolution: {integrity: sha512-XPRRMQR5oseJXdfK8kQDj2LCV1UjmTuDlPbbJ8C2WLaATNhdvZLhQO0+NtWnRrQTP+erLR5cVxfcwyqF+3R8SA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + prettier: ^2.0.0 + + prettier-plugin-sh@0.12.8: + resolution: {integrity: sha512-VOq8h2Gn5UzrCIKm4p/nAScXJbN09HdyFDknAcxt6Qu/tv/juu9bahxSrcnM9XWYA+Spz1F1ANJ4LhfwB7+Q1Q==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + prettier: ^2.0.0 + + prettier@2.8.2: + resolution: {integrity: sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-format@29.5.0: + resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + proc-log@1.0.0: + resolution: {integrity: sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==} + + proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + promise-all-reject-late@1.0.1: + resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} + + promise-call-limit@1.0.2: + resolution: {integrity: sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==} + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + propagate@2.0.1: + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + + punycode@2.1.0: + resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} + engines: {node: '>=6'} + + punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + pure-rand@6.0.2: + resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + + query-string@5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + + querystring@0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + ramda@0.27.2: + resolution: {integrity: sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + read-cmd-shim@3.0.1: + resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + read-package-json-fast@2.0.3: + resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} + engines: {node: '>=10'} + + read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + read-package-json@6.0.4: + resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + read-yaml-file@1.1.0: + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + engines: {node: '>=6'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.4.1: + resolution: {integrity: sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-scoped-modules@1.1.0: + resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} + deprecated: This functionality has been moved to @npmcli/fs + + readdirp@3.5.0: + resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + engines: {node: '>=8.10.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redeyed@2.1.1: + resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + + regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + + regenerator-transform@0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + + regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + + regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + + regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + + remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + + remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + + remark-stringify@10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + + remove-trailing-separator@1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + + replace-ext@1.0.1: + resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} + engines: {node: '>= 0.10'} + + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + requireindex@1.1.0: + resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} + engines: {node: '>=0.10.5'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + + resolve@2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + + run-applescript@5.0.0: + resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} + engines: {node: '>=12'} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + + safe-regex@2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sax@1.2.1: + resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} + + scoped-regex@2.1.0: + resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} + engines: {node: '>=8'} + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + + semver@5.5.0: + resolution: {integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==} + hasBin: true + + semver@5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + hasBin: true + + semver@6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + semver@7.5.2: + resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} + engines: {node: '>=10'} + hasBin: true + + semver@7.5.3: + resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} + engines: {node: '>=10'} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + serialize-javascript@5.0.1: + resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + servify@0.1.12: + resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} + engines: {node: '>=6'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sh-syntax@0.3.7: + resolution: {integrity: sha512-xIB/uRniZ9urxAuXp1Ouh/BKSI1VK8RSqfwGj7cV57HvGrFo3vHdJfv8Tdp/cVcxJgXQTkmHr5mG5rqJW8r4wQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} + + shx@0.3.3: + resolution: {integrity: sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==} + engines: {node: '>=6'} + hasBin: true + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.0.2: + resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} + engines: {node: '>=14'} + + sigstore@1.6.0: + resolution: {integrity: sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + smartwrap@2.0.2: + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + engines: {node: '>=6'} + hasBin: true + + socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + + socks@2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + + sort-keys@4.2.0: + resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} + engines: {node: '>=8'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + spawn-command@0.0.2-1: + resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} + + spawndamnit@2.0.0: + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.13: + resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + ssri@10.0.4: + resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stdout-stderr@0.1.13: + resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} + engines: {node: '>=8.0.0'} + + stream-transform@2.1.3: + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + + strict-uri-encode@1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + + string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + + string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom-buf@1.0.0: + resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==} + engines: {node: '>=4'} + + strip-bom-stream@2.0.0: + resolution: {integrity: sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==} + engines: {node: '>=0.10.0'} + + strip-bom@2.0.0: + resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} + engines: {node: '>=0.10.0'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-color@9.3.1: + resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==} + engines: {node: '>=12'} + + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swarm-js@0.1.42: + resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} + + synckit@0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar@4.4.19: + resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} + engines: {node: '>=4.5'} + + tar@6.1.15: + resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} + engines: {node: '>=10'} + + term-size@2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + textextensions@5.16.0: + resolution: {integrity: sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw==} + engines: {node: '>=0.8'} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timed-out@4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + + titleize@3.0.0: + resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} + engines: {node: '>=12'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + to-vfile@7.2.4: + resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + treeverse@1.0.4: + resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} + + trim-newlines@3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + + trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + + ts-node@10.9.1: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.6.0: + resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + tty-table@4.2.1: + resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} + engines: {node: '>=8.0.0'} + hasBin: true + + tuf-js@1.1.7: + resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@3.0.0: + resolution: {integrity: sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw==} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type@2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + + typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typedoc@0.25.13: + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + + typescript-eslint-parser@18.0.0: + resolution: {integrity: sha512-Pn/A/Cw9ysiXSX5U1xjBmPQlxtWGV2o7jDNiH/u7KgBO2yC/y37wNFl2ogSrGZBQFuglLzGq0Xl0Bt31Jv44oA==} + engines: {node: '>=6.14.0'} + peerDependencies: + typescript: '*' + + typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true + + ultron@1.1.1: + resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unified-engine@10.1.0: + resolution: {integrity: sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==} + + unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + + unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + unist-util-inspect@7.0.2: + resolution: {integrity: sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==} + + unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + + unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + + unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + + unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + + unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + + unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + + unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + + universal-user-agent@6.0.0: + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.0.11: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-set-query@1.0.0: + resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} + + url@0.10.3: + resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} + + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + uuid@8.0.0: + resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@3.0.0: + resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} + + validate-npm-package-name@5.0.0: + resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + varint@5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + + vfile-reporter@7.0.5: + resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + + vfile-sort@3.0.1: + resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + + vfile-statistics@2.0.1: + resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + + vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + + vinyl-file@3.0.0: + resolution: {integrity: sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==} + engines: {node: '>=4'} + + vinyl@2.2.1: + resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} + engines: {node: '>= 0.10'} + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + + walk-up-path@1.0.0: + resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} + + walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web3-bzz@1.9.0: + resolution: {integrity: sha512-9Zli9dikX8GdHwBb5/WPzpSVuy3EWMKY3P4EokCQra31fD7DLizqAAaTUsFwnK7xYkw5ogpHgelw9uKHHzNajg==} + engines: {node: '>=8.0.0'} + + web3-core-helpers@1.9.0: + resolution: {integrity: sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg==} + engines: {node: '>=8.0.0'} + + web3-core-method@1.9.0: + resolution: {integrity: sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w==} + engines: {node: '>=8.0.0'} + + web3-core-promievent@1.9.0: + resolution: {integrity: sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ==} + engines: {node: '>=8.0.0'} + + web3-core-requestmanager@1.9.0: + resolution: {integrity: sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q==} + engines: {node: '>=8.0.0'} + + web3-core-subscriptions@1.9.0: + resolution: {integrity: sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA==} + engines: {node: '>=8.0.0'} + + web3-core@1.9.0: + resolution: {integrity: sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w==} + engines: {node: '>=8.0.0'} + + web3-eth-abi@1.9.0: + resolution: {integrity: sha512-0BLQ3FKMrzJkA930jOX3fMaybAyubk06HChclLpiR0NWmgWXm1tmBrJdkyRy2ZTZpmfuZc9xTFRfl0yZID1voA==} + engines: {node: '>=8.0.0'} + + web3-eth-accounts@1.9.0: + resolution: {integrity: sha512-VeIZVevmnSll0AC1k5F/y398ZE89d1SRuYk8IewLUhL/tVAsFEsjl2SGgm0+aDcHmgPrkW+qsCJ+C7rWg/N4ZA==} + engines: {node: '>=8.0.0'} + + web3-eth-contract@1.9.0: + resolution: {integrity: sha512-+j26hpSaEtAdUed0TN5rnc+YZOcjPxMjFX4ZBKatvFkImdbVv/tzTvcHlltubSpgb2ZLyZ89lSL6phKYwd2zNQ==} + engines: {node: '>=8.0.0'} + + web3-eth-ens@1.9.0: + resolution: {integrity: sha512-LOJZeN+AGe9arhuExnrPPFYQr4WSxXEkpvYIlst/joOEUNLDwfndHnJIK6PI5mXaYSROBtTx6erv+HupzGo7vA==} + engines: {node: '>=8.0.0'} + + web3-eth-iban@1.9.0: + resolution: {integrity: sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog==} + engines: {node: '>=8.0.0'} + + web3-eth-personal@1.9.0: + resolution: {integrity: sha512-r9Ldo/luBqJlv1vCUEQnUS+C3a3ZdbYxVHyfDkj6RWMyCqqo8JE41HWE+pfa0RmB1xnGL2g8TbYcHcqItck/qg==} + engines: {node: '>=8.0.0'} + + web3-net@1.9.0: + resolution: {integrity: sha512-L+fDZFgrLM5Y15aonl2q6L+RvfaImAngmC0Jv45hV2FJ5IfRT0/2ob9etxZmvEBWvOpbqSvghfOhJIT3XZ37Pg==} + engines: {node: '>=8.0.0'} + + web3-providers-http@1.9.0: + resolution: {integrity: sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ==} + engines: {node: '>=8.0.0'} + + web3-providers-ipc@1.9.0: + resolution: {integrity: sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA==} + engines: {node: '>=8.0.0'} + + web3-providers-ws@1.9.0: + resolution: {integrity: sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w==} + engines: {node: '>=8.0.0'} + + web3-shh@1.9.0: + resolution: {integrity: sha512-bIBZlralgz4ICCrwkefB2nPPJWfx28NuHIpjB7d9ADKynElubQuqudYhKtSEkKXACuME/BJm0pIFJcJs/gDnMg==} + engines: {node: '>=8.0.0'} + + web3-utils@1.9.0: + resolution: {integrity: sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==} + engines: {node: '>=8.0.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + websocket@1.0.34: + resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} + engines: {node: '>=4.0.0'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-pm@2.0.0: + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + engines: {node: '>=8.15'} + + which-typed-array@1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + + wide-align@1.1.3: + resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + word-wrap@1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workerpool@6.1.4: + resolution: {integrity: sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + ws@3.3.3: + resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr-request-promise@0.1.3: + resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} + + xhr-request@1.1.0: + resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} + + xhr@2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yaeti@0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + + yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-eslint-parser@1.2.2: + resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} + engines: {node: ^14.17.0 || >=16.0.0} + + yaml@2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.4: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yeoman-environment@3.19.3: + resolution: {integrity: sha512-/+ODrTUHtlDPRH9qIC0JREH8+7nsRcjDl3Bxn2Xo/rvAaVvixH5275jHwg0C85g4QsF4P6M2ojfScPPAl+pLAg==} + engines: {node: '>=12.10.0'} + hasBin: true + + yeoman-generator@5.9.0: + resolution: {integrity: sha512-sN1e01Db4fdd8P/n/yYvizfy77HdbwzvXmPxps9Gwz2D24slegrkSn+qyj+0nmZhtFwGX2i/cH29QDrvAFT9Aw==} + engines: {node: '>=12.10.0'} + peerDependencies: + yeoman-environment: ^3.2.0 + peerDependenciesMeta: + yeoman-environment: + optional: true + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + +snapshots: + + '@ampproject/remapping@2.2.1': + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + + '@artela/aspect-libs@file:packages/libs': + dependencies: + as-proto: 1.3.0 + assemblyscript: 0.27.27 + + '@artela/web3-atl-aspect@1.9.22(encoding@0.1.13)': + dependencies: + '@artela/web3-core': 1.9.22(encoding@0.1.13) + '@artela/web3-core-method': 1.9.22 + '@artela/web3-eth-contract': 1.9.22(encoding@0.1.13) + '@artela/web3-utils': 1.9.22 + '@ethersproject/address': 5.7.0 + '@types/bn.js': 5.1.5 + web3-core-helpers: 1.9.0 + web3-core-promievent: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-eth-abi: 1.9.0 + web3-eth-accounts: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@artela/web3-atl@1.9.22(encoding@0.1.13)': + dependencies: + '@artela/web3-atl-aspect': 1.9.22(encoding@0.1.13) + '@artela/web3-core': 1.9.22(encoding@0.1.13) + '@artela/web3-core-method': 1.9.22 + '@artela/web3-eth-contract': 1.9.22(encoding@0.1.13) + '@artela/web3-utils': 1.9.22 + web3-core-helpers: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-eth-abi: 1.9.0 + web3-eth-accounts: 1.9.0(encoding@0.1.13) + web3-eth-ens: 1.9.0(encoding@0.1.13) + web3-eth-iban: 1.9.0 + web3-eth-personal: 1.9.0(encoding@0.1.13) + web3-net: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@artela/web3-core-method@1.9.22': + dependencies: + '@artela/web3-utils': 1.9.22 + '@ethersproject/address': 5.7.0 + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.9.0 + web3-core-promievent: 1.9.0 + web3-core-subscriptions: 1.9.0 + + '@artela/web3-core@1.9.22(encoding@0.1.13)': + dependencies: + '@artela/web3-core-method': 1.9.22 + '@artela/web3-utils': 1.9.22 + '@types/bn.js': 5.1.5 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.9.0 + web3-core-requestmanager: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@artela/web3-eth-contract@1.9.22(encoding@0.1.13)': + dependencies: + '@artela/web3-core': 1.9.22(encoding@0.1.13) + '@artela/web3-core-method': 1.9.22 + '@artela/web3-utils': 1.9.22 + '@types/bn.js': 5.1.5 + web3-core-helpers: 1.9.0 + web3-core-promievent: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-eth-abi: 1.9.0 + web3-eth-accounts: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@artela/web3-eth@1.9.22(encoding@0.1.13)': + dependencies: + '@artela/web3-core': 1.9.22(encoding@0.1.13) + '@artela/web3-core-method': 1.9.22 + '@artela/web3-eth-contract': 1.9.22(encoding@0.1.13) + '@artela/web3-utils': 1.9.22 + web3-core-helpers: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-eth-abi: 1.9.0 + web3-eth-accounts: 1.9.0(encoding@0.1.13) + web3-eth-ens: 1.9.0(encoding@0.1.13) + web3-eth-iban: 1.9.0 + web3-eth-personal: 1.9.0(encoding@0.1.13) + web3-net: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@artela/web3-utils@1.9.22': + dependencies: + bn.js: 5.2.1 + ethereum-bloom-filters: 1.1.0 + ethereumjs-util: 7.1.5 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + '@artela/web3@1.9.22(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': + dependencies: + '@artela/web3-atl': 1.9.22(encoding@0.1.13) + '@artela/web3-core': 1.9.22(encoding@0.1.13) + '@artela/web3-eth': 1.9.22(encoding@0.1.13) + '@artela/web3-utils': 1.9.22 + web3-bzz: 1.9.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + web3-eth-personal: 1.9.0(encoding@0.1.13) + web3-net: 1.9.0(encoding@0.1.13) + web3-shh: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@assemblyscript/loader@0.27.27': {} + + '@babel/code-frame@7.22.5': + dependencies: + '@babel/highlight': 7.22.5 + + '@babel/compat-data@7.22.5': {} + + '@babel/core@7.20.5': + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.20.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + + '@babel/eslint-parser@7.22.5(@babel/core@7.20.5)(eslint@8.42.0)': + dependencies: + '@babel/core': 7.20.5 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.42.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.0 + + '@babel/generator@7.22.5': + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.5': + dependencies: + '@babel/types': 7.22.5 + + '@babel/helper-compilation-targets@7.22.5(@babel/core@7.20.5)': + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.20.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.0 + + '@babel/helper-create-class-features-plugin@7.22.5(@babel/core@7.20.5)': + dependencies: + '@babel/core': 7.20.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-annotate-as-pure': 7.22.5 regexpu-core: 5.3.2 semver: 6.3.0 - dev: true - /@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.20.5): - resolution: {integrity: sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==} - peerDependencies: - '@babel/core': ^7.4.0-0 + '@babel/helper-define-polyfill-provider@0.3.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.20.5) @@ -289,45 +6671,27 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-environment-visitor@7.22.5: - resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-environment-visitor@7.22.5': {} - /@babel/helper-function-name@7.22.5: - resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-function-name@7.22.5': dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - dev: true - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-member-expression-to-functions@7.22.5: - resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-module-imports@7.22.5: - resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-module-transforms@7.22.5: - resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.22.5': dependencies: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 @@ -339,25 +6703,14 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-plugin-utils@7.22.5': {} - /@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-remap-async-to-generator@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -366,11 +6719,8 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-replace-supers@7.22.5: - resolution: {integrity: sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==} - engines: {node: '>=6.9.0'} + '@babel/helper-replace-supers@7.22.5': dependencies: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-member-expression-to-functions': 7.22.5 @@ -380,47 +6730,26 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-split-export-declaration@7.22.5: - resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.22.5': {} - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-identifier@7.22.5': {} - /@babel/helper-validator-option@7.22.5: - resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-option@7.22.5': {} - /@babel/helper-wrap-function@7.22.5: - resolution: {integrity: sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==} - engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.5': dependencies: '@babel/helper-function-name': 7.22.5 '@babel/template': 7.22.5 @@ -428,63 +6757,38 @@ packages: '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/helpers@7.22.5: - resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.22.5': dependencies: '@babel/template': 7.22.5 '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.22.5': dependencies: '@babel/helper-validator-identifier': 7.22.5 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true - /@babel/parser@7.22.5: - resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.22.5': dependencies: '@babel/types': 7.22.5 - dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.22.5(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.20.5): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-environment-visitor': 7.22.5 @@ -493,26 +6797,16 @@ packages: '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.20.5) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.20.5): - resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + '@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.20.5) @@ -520,79 +6814,44 @@ packages: '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.20.5): - resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.20.5): - resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.20.5): - resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.20.5)': dependencies: '@babel/compat-data': 7.22.5 '@babel/core': 7.20.5 @@ -600,49 +6859,29 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.5) '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.20.5): - resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-class-features-plugin': 7.22.5(@babel/core@7.20.5) '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.20.5): - resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -651,211 +6890,114 @@ packages: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} - engines: {node: '>=4'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.20.5) '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.5): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.5): - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.20.5): - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.5): - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.5): - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.5): - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.5): - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.20.5): - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.5): - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-module-imports': 7.22.5 @@ -863,33 +7005,18 @@ packages: '@babel/helper-remap-async-to-generator': 7.22.5(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-classes@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -903,121 +7030,66 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.5 - dev: true - /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.20.5) '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.20.5) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-module-transforms': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-module-transforms': 7.22.5 @@ -1025,13 +7097,8 @@ packages: '@babel/helper-simple-access': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-hoist-variables': 7.22.5 @@ -1040,164 +7107,89 @@ packages: '@babel/helper-validator-identifier': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-module-transforms': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.20.5) '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.5) - dev: true - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.1 - dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-typescript@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-annotate-as-pure': 7.22.5 @@ -1206,34 +7198,19 @@ packages: '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.20.5): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-create-regexp-features-plugin': 7.22.5(@babel/core@7.20.5) '@babel/helper-plugin-utils': 7.22.5 - dev: true - /@babel/preset-env@7.20.2(@babel/core@7.20.5): - resolution: {integrity: sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.20.2(@babel/core@7.20.5)': dependencies: '@babel/compat-data': 7.22.5 '@babel/core': 7.20.5 @@ -1313,12 +7290,8 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/preset-modules@0.1.5(@babel/core@7.20.5): - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-modules@0.1.5(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 @@ -1326,13 +7299,8 @@ packages: '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.20.5) '@babel/types': 7.22.5 esutils: 2.0.3 - dev: true - /@babel/preset-typescript@7.18.6(@babel/core@7.20.5): - resolution: {integrity: sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-typescript@7.18.6(@babel/core@7.20.5)': dependencies: '@babel/core': 7.20.5 '@babel/helper-plugin-utils': 7.22.5 @@ -1340,31 +7308,20 @@ packages: '@babel/plugin-transform-typescript': 7.22.5(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /@babel/regjsgen@0.8.0: - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - dev: true + '@babel/regjsgen@0.8.0': {} - /@babel/runtime@7.22.5: - resolution: {integrity: sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==} - engines: {node: '>=6.9.0'} + '@babel/runtime@7.22.5': dependencies: regenerator-runtime: 0.13.11 - dev: true - /@babel/template@7.22.5: - resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} - engines: {node: '>=6.9.0'} + '@babel/template@7.22.5': dependencies: '@babel/code-frame': 7.22.5 '@babel/parser': 7.22.5 '@babel/types': 7.22.5 - dev: true - /@babel/traverse@7.22.5: - resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.22.5': dependencies: '@babel/code-frame': 7.22.5 '@babel/generator': 7.22.5 @@ -1378,23 +7335,16 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/types@7.22.5: - resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} - engines: {node: '>=6.9.0'} + '@babel/types@7.22.5': dependencies: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 - dev: true - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@bcoe/v8-coverage@0.2.3': {} - /@changesets/apply-release-plan@6.1.3: - resolution: {integrity: sha512-ECDNeoc3nfeAe1jqJb5aFQX7CqzQhD2klXRez2JDb/aVpGUbX673HgKrnrgJRuQR/9f2TtLoYIzrGB9qwD77mg==} + '@changesets/apply-release-plan@6.1.3': dependencies: '@babel/runtime': 7.22.5 '@changesets/config': 2.3.0 @@ -1409,10 +7359,8 @@ packages: prettier: 2.8.2 resolve-from: 5.0.0 semver: 5.7.1 - dev: true - /@changesets/assemble-release-plan@5.2.3: - resolution: {integrity: sha512-g7EVZCmnWz3zMBAdrcKhid4hkHT+Ft1n0mLussFMcB1dE2zCuwcvGoy9ec3yOgPGF4hoMtgHaMIk3T3TBdvU9g==} + '@changesets/assemble-release-plan@5.2.3': dependencies: '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 @@ -1420,27 +7368,20 @@ packages: '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 semver: 5.7.1 - dev: true - /@changesets/changelog-git@0.1.14: - resolution: {integrity: sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==} + '@changesets/changelog-git@0.1.14': dependencies: '@changesets/types': 5.2.1 - dev: true - /@changesets/changelog-github@0.4.7: - resolution: {integrity: sha512-UUG5sKwShs5ha1GFnayUpZNcDGWoY7F5XxhOEHS62sDPOtoHQZsG3j1nC5RxZ3M1URHA321cwVZHeXgu99Y3ew==} + '@changesets/changelog-github@0.4.7(encoding@0.1.13)': dependencies: - '@changesets/get-github-info': 0.5.2 + '@changesets/get-github-info': 0.5.2(encoding@0.1.13) '@changesets/types': 5.2.1 dotenv: 8.6.0 transitivePeerDependencies: - encoding - dev: true - /@changesets/cli@2.25.2: - resolution: {integrity: sha512-ACScBJXI3kRyMd2R8n8SzfttDHi4tmKSwVwXBazJOylQItSRSF4cGmej2E4FVf/eNfGy6THkL9GzAahU9ErZrA==} - hasBin: true + '@changesets/cli@2.25.2': dependencies: '@babel/runtime': 7.22.5 '@changesets/apply-release-plan': 6.1.3 @@ -1475,10 +7416,8 @@ packages: spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.1 - dev: true - /@changesets/config@2.3.0: - resolution: {integrity: sha512-EgP/px6mhCx8QeaMAvWtRrgyxW08k/Bx2tpGT+M84jEdX37v3VKfh4Cz1BkwrYKuMV2HZKeHOh8sHvja/HcXfQ==} + '@changesets/config@2.3.0': dependencies: '@changesets/errors': 0.1.4 '@changesets/get-dependents-graph': 1.3.5 @@ -1487,35 +7426,27 @@ packages: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 - dev: true - /@changesets/errors@0.1.4: - resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + '@changesets/errors@0.1.4': dependencies: extendable-error: 0.1.7 - dev: true - /@changesets/get-dependents-graph@1.3.5: - resolution: {integrity: sha512-w1eEvnWlbVDIY8mWXqWuYE9oKhvIaBhzqzo4ITSJY9hgoqQ3RoBqwlcAzg11qHxv/b8ReDWnMrpjpKrW6m1ZTA==} + '@changesets/get-dependents-graph@1.3.5': dependencies: '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 semver: 5.7.1 - dev: true - /@changesets/get-github-info@0.5.2: - resolution: {integrity: sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==} + '@changesets/get-github-info@0.5.2(encoding@0.1.13)': dependencies: dataloader: 1.4.0 - node-fetch: 2.6.11 + node-fetch: 2.6.11(encoding@0.1.13) transitivePeerDependencies: - encoding - dev: true - /@changesets/get-release-plan@3.0.16: - resolution: {integrity: sha512-OpP9QILpBp1bY2YNIKFzwigKh7Qe9KizRsZomzLe6pK8IUo8onkAAVUD8+JRKSr8R7d4+JRuQrfSSNlEwKyPYg==} + '@changesets/get-release-plan@3.0.16': dependencies: '@babel/runtime': 7.22.5 '@changesets/assemble-release-plan': 5.2.3 @@ -1524,14 +7455,10 @@ packages: '@changesets/read': 0.5.9 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 - dev: true - /@changesets/get-version-range-type@0.3.2: - resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} - dev: true + '@changesets/get-version-range-type@0.3.2': {} - /@changesets/git@1.5.0: - resolution: {integrity: sha512-Xo8AT2G7rQJSwV87c8PwMm6BAc98BnufRMsML7m7Iw8Or18WFvFmxqG5aOL5PBvhgq9KrKvaeIBNIymracSuHg==} + '@changesets/git@1.5.0': dependencies: '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 @@ -1539,10 +7466,8 @@ packages: '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 spawndamnit: 2.0.0 - dev: true - /@changesets/git@2.0.0: - resolution: {integrity: sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==} + '@changesets/git@2.0.0': dependencies: '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 @@ -1551,33 +7476,25 @@ packages: is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 - dev: true - /@changesets/logger@0.0.5: - resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + '@changesets/logger@0.0.5': dependencies: chalk: 2.4.2 - dev: true - /@changesets/parse@0.3.16: - resolution: {integrity: sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==} + '@changesets/parse@0.3.16': dependencies: '@changesets/types': 5.2.1 js-yaml: 3.14.1 - dev: true - /@changesets/pre@1.0.14: - resolution: {integrity: sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==} + '@changesets/pre@1.0.14': dependencies: '@babel/runtime': 7.22.5 '@changesets/errors': 0.1.4 '@changesets/types': 5.2.1 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - dev: true - /@changesets/read@0.5.9: - resolution: {integrity: sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==} + '@changesets/read@0.5.9': dependencies: '@babel/runtime': 7.22.5 '@changesets/git': 2.0.0 @@ -1587,60 +7504,36 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 - dev: true - /@changesets/types@4.1.0: - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: true + '@changesets/types@4.1.0': {} - /@changesets/types@5.2.1: - resolution: {integrity: sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==} - dev: true + '@changesets/types@5.2.1': {} - /@changesets/write@0.2.3: - resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + '@changesets/write@0.2.3': dependencies: '@babel/runtime': 7.22.5 '@changesets/types': 5.2.1 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.2 - dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - /@eslint-community/eslint-utils@4.4.0(eslint@8.31.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.0(eslint@8.31.0)': dependencies: eslint: 8.31.0 eslint-visitor-keys: 3.4.1 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.42.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.0(eslint@8.42.0)': dependencies: eslint: 8.42.0 eslint-visitor-keys: 3.4.1 - dev: true - /@eslint-community/regexpp@4.5.1: - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.5.1': {} - /@eslint/eslintrc@1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@1.4.1': dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) @@ -1653,11 +7546,8 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/eslintrc@2.0.3: - resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.0.3': dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) @@ -1670,71 +7560,196 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.42.0: - resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.42.0': {} - /@gar/promisify@1.1.3: - resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} - dev: true + '@ethereumjs/common@2.5.0': + dependencies: + crc-32: 1.2.2 + ethereumjs-util: 7.1.5 - /@humanwhocodes/config-array@0.11.10: - resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} - engines: {node: '>=10.10.0'} + '@ethereumjs/common@4.3.0': + dependencies: + '@ethereumjs/util': 9.0.3 + + '@ethereumjs/rlp@5.0.2': {} + + '@ethereumjs/tx@3.3.2': + dependencies: + '@ethereumjs/common': 2.5.0 + ethereumjs-util: 7.1.5 + + '@ethereumjs/tx@5.3.0': + dependencies: + '@ethereumjs/common': 4.3.0 + '@ethereumjs/rlp': 5.0.2 + '@ethereumjs/util': 9.0.3 + ethereum-cryptography: 2.1.3 + + '@ethereumjs/util@9.0.3': + dependencies: + '@ethereumjs/rlp': 5.0.2 + ethereum-cryptography: 2.1.3 + + '@ethersproject/abi@5.7.0': + 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': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + '@ethersproject/abstract-signer@5.7.0': + 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': + 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': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/hash@5.7.0': + 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/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/signing-key@5.7.0': + 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/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + 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/web@5.7.1': + 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 + + '@gar/promisify@1.1.3': {} + + '@humanwhocodes/config-array@0.11.10': dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true + '@humanwhocodes/object-schema@1.2.1': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@isaacs/string-locale-compare@1.1.0: - resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==} - dev: true + '@isaacs/string-locale-compare@1.1.0': {} - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 js-yaml: 3.14.1 resolve-from: 5.0.0 - dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jest/console@29.5.0: - resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/console@29.5.0': dependencies: '@jest/types': 29.5.0 '@types/node': 20.3.3 @@ -1742,16 +7757,8 @@ packages: jest-message-util: 29.5.0 jest-util: 29.5.0 slash: 3.0.0 - dev: true - /@jest/core@29.5.0: - resolution: {integrity: sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/core@29.5.0(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6))': dependencies: '@jest/console': 29.5.0 '@jest/reporters': 29.5.0 @@ -1765,7 +7772,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@20.3.3) + jest-config: 29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -1784,38 +7791,26 @@ packages: transitivePeerDependencies: - supports-color - ts-node - dev: true - /@jest/environment@29.5.0: - resolution: {integrity: sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/environment@29.5.0': dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 '@types/node': 20.3.3 jest-mock: 29.5.0 - dev: true - /@jest/expect-utils@29.5.0: - resolution: {integrity: sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@29.5.0': dependencies: jest-get-type: 29.4.3 - dev: true - /@jest/expect@29.5.0: - resolution: {integrity: sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@29.5.0': dependencies: expect: 29.5.0 jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/fake-timers@29.5.0: - resolution: {integrity: sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/fake-timers@29.5.0': dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.1.0 @@ -1823,11 +7818,8 @@ packages: jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 - dev: true - /@jest/globals@29.5.0: - resolution: {integrity: sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/globals@29.5.0': dependencies: '@jest/environment': 29.5.0 '@jest/expect': 29.5.0 @@ -1835,16 +7827,8 @@ packages: jest-mock: 29.5.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/reporters@29.5.0: - resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + '@jest/reporters@29.5.0': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.5.0 @@ -1872,47 +7856,32 @@ packages: v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color - dev: true - /@jest/schemas@29.4.3: - resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/schemas@29.4.3': dependencies: '@sinclair/typebox': 0.25.24 - dev: true - /@jest/source-map@29.4.3: - resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/source-map@29.4.3': dependencies: '@jridgewell/trace-mapping': 0.3.18 callsites: 3.1.0 graceful-fs: 4.2.11 - dev: true - /@jest/test-result@29.5.0: - resolution: {integrity: sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-result@29.5.0': dependencies: '@jest/console': 29.5.0 '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 - dev: true - /@jest/test-sequencer@29.5.0: - resolution: {integrity: sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/test-sequencer@29.5.0': dependencies: '@jest/test-result': 29.5.0 graceful-fs: 4.2.11 jest-haste-map: 29.5.0 slash: 3.0.0 - dev: true - /@jest/transform@29.5.0: - resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/transform@29.5.0': dependencies: '@babel/core': 7.20.5 '@jest/types': 29.5.0 @@ -1931,11 +7900,8 @@ packages: write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color - dev: true - /@jest/types@29.5.0: - resolution: {integrity: sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@29.5.0': dependencies: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 @@ -1943,57 +7909,39 @@ packages: '@types/node': 20.3.3 '@types/yargs': 17.0.24 chalk: 4.1.2 - dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.3': dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 - dev: true - /@jridgewell/resolve-uri@3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} - engines: {node: '>=6.0.0'} + '@jridgewell/resolve-uri@3.1.0': {} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/set-array@1.1.2': {} - /@jridgewell/sourcemap-codec@1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true + '@jridgewell/sourcemap-codec@1.4.14': {} - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.4.15': {} - /@jridgewell/trace-mapping@0.3.18: - resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + '@jridgewell/trace-mapping@0.3.18': dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.15 - /@manypkg/find-root@1.1.0: - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@manypkg/find-root@1.1.0': dependencies: '@babel/runtime': 7.22.5 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: true - /@manypkg/get-packages@1.1.3: - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/get-packages@1.1.3': dependencies: '@babel/runtime': 7.22.5 '@changesets/types': 4.1.0 @@ -2001,36 +7949,36 @@ packages: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@mxssfd/typedoc-theme@1.1.3(typedoc@0.25.13(typescript@5.1.6))': + dependencies: + typedoc: 0.25.13(typescript@5.1.6) + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@noble/curves@1.3.0': + dependencies: + '@noble/hashes': 1.3.3 + + '@noble/hashes@1.3.3': {} + + '@noble/hashes@1.4.0': {} + + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - /@npmcli/arborist@4.3.1: - resolution: {integrity: sha512-yMRgZVDpwWjplorzt9SFSaakWx6QIK248Nw4ZFgkrAy/GvJaFRaSZzE6nD7JBK5r8g/+PTxFq5Wj/sfciE7x+A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} - hasBin: true + '@npmcli/arborist@4.3.1': dependencies: '@isaacs/string-locale-compare': 1.1.0 '@npmcli/installed-package-contents': 1.0.7 @@ -2067,11 +8015,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@npmcli/config@6.2.0: - resolution: {integrity: sha512-lPAPNVUvlv6x0uwGiKzuWVUy1WSBaK5P0t9PoQQVIAbc1RaJLkaNxyUQZOrFJ7Y/ShzLw5skzruThhD9Qcju/A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/config@6.2.0': dependencies: '@npmcli/map-workspaces': 3.0.4 ini: 4.1.1 @@ -2080,32 +8025,22 @@ packages: read-package-json-fast: 3.0.2 semver: 7.5.4 walk-up-path: 3.0.1 - dev: true - /@npmcli/fs@1.1.1: - resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 semver: 7.5.4 - dev: true - /@npmcli/fs@2.1.2: - resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 semver: 7.5.4 - dev: true - /@npmcli/fs@3.1.0: - resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/fs@3.1.0': dependencies: semver: 7.5.4 - dev: true - /@npmcli/git@2.1.0: - resolution: {integrity: sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==} + '@npmcli/git@2.1.0': dependencies: '@npmcli/promise-spawn': 1.3.2 lru-cache: 6.0.0 @@ -2117,11 +8052,8 @@ packages: which: 2.0.2 transitivePeerDependencies: - bluebird - dev: true - /@npmcli/git@4.1.0: - resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/git@4.1.0': dependencies: '@npmcli/promise-spawn': 6.0.2 lru-cache: 7.18.3 @@ -2133,49 +8065,32 @@ packages: which: 3.0.1 transitivePeerDependencies: - bluebird - dev: true - /@npmcli/installed-package-contents@1.0.7: - resolution: {integrity: sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==} - engines: {node: '>= 10'} - hasBin: true + '@npmcli/installed-package-contents@1.0.7': dependencies: npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 - dev: true - /@npmcli/installed-package-contents@2.0.2: - resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + '@npmcli/installed-package-contents@2.0.2': dependencies: npm-bundled: 3.0.0 npm-normalize-package-bin: 3.0.1 - dev: true - /@npmcli/map-workspaces@2.0.4: - resolution: {integrity: sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + '@npmcli/map-workspaces@2.0.4': dependencies: '@npmcli/name-from-folder': 1.0.1 glob: 8.1.0 minimatch: 5.1.6 read-package-json-fast: 2.0.3 - dev: true - /@npmcli/map-workspaces@3.0.4: - resolution: {integrity: sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/map-workspaces@3.0.4': dependencies: '@npmcli/name-from-folder': 2.0.0 glob: 10.3.1 minimatch: 9.0.1 read-package-json-fast: 3.0.2 - dev: true - /@npmcli/metavuln-calculator@2.0.0: - resolution: {integrity: sha512-VVW+JhWCKRwCTE+0xvD6p3uV4WpqocNYYtzyvenqL/u1Q3Xx6fGTJ+6UoIoii07fbuEO9U3IIyuGY0CYHDv1sg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} + '@npmcli/metavuln-calculator@2.0.0': dependencies: cacache: 15.3.0 json-parse-even-better-errors: 2.3.1 @@ -2184,65 +8099,38 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@npmcli/move-file@1.1.2: - resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} - engines: {node: '>=10'} - deprecated: This functionality has been moved to @npmcli/fs + '@npmcli/move-file@1.1.2': dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 - dev: true - /@npmcli/move-file@2.0.1: - resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - deprecated: This functionality has been moved to @npmcli/fs + '@npmcli/move-file@2.0.1': dependencies: mkdirp: 1.0.4 rimraf: 3.0.2 - dev: true - /@npmcli/name-from-folder@1.0.1: - resolution: {integrity: sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==} - dev: true + '@npmcli/name-from-folder@1.0.1': {} - /@npmcli/name-from-folder@2.0.0: - resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@npmcli/name-from-folder@2.0.0': {} - /@npmcli/node-gyp@1.0.3: - resolution: {integrity: sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==} - dev: true + '@npmcli/node-gyp@1.0.3': {} - /@npmcli/node-gyp@3.0.0: - resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@npmcli/node-gyp@3.0.0': {} - /@npmcli/package-json@1.0.1: - resolution: {integrity: sha512-y6jnu76E9C23osz8gEMBayZmaZ69vFOIk8vR1FJL/wbEJ54+9aVG9rLTjQKSXfgYZEr50nw1txBBFfBZZe+bYg==} + '@npmcli/package-json@1.0.1': dependencies: json-parse-even-better-errors: 2.3.1 - dev: true - /@npmcli/promise-spawn@1.3.2: - resolution: {integrity: sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==} + '@npmcli/promise-spawn@1.3.2': dependencies: infer-owner: 1.0.4 - dev: true - /@npmcli/promise-spawn@6.0.2: - resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/promise-spawn@6.0.2': dependencies: which: 3.0.1 - dev: true - /@npmcli/run-script@2.0.0: - resolution: {integrity: sha512-fSan/Pu11xS/TdaTpTB0MRn9guwGU8dye+x56mEVgBEd/QsybBbYcAL0phPXi8SGWFEChkQd6M9qL4y6VOpFig==} + '@npmcli/run-script@2.0.0': dependencies: '@npmcli/node-gyp': 1.0.3 '@npmcli/promise-spawn': 1.3.2 @@ -2251,11 +8139,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /@npmcli/run-script@6.0.2: - resolution: {integrity: sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@npmcli/run-script@6.0.2': dependencies: '@npmcli/node-gyp': 3.0.0 '@npmcli/promise-spawn': 6.0.2 @@ -2264,11 +8149,8 @@ packages: which: 3.0.1 transitivePeerDependencies: - supports-color - dev: true - /@oclif/core@2.15.0(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} - engines: {node: '>=14.0.0'} + '@oclif/core@2.15.0(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@types/cli-progress': 3.11.0 ansi-escapes: 4.3.2 @@ -2303,11 +8185,8 @@ packages: - '@swc/wasm' - '@types/node' - typescript - dev: true - /@oclif/core@2.8.11(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-9wYW6KRSWfB/D+tqeyl/jxmEz/xPXkFJGVWfKaptqHz6FPWNJREjAM945MuJL2Y8NRhMe+ScRlZ3WpdToX5aVQ==} - engines: {node: '>=14.0.0'} + '@oclif/core@2.8.11(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@types/cli-progress': 3.11.0 ansi-escapes: 4.3.2 @@ -2343,11 +8222,8 @@ packages: - '@swc/wasm' - '@types/node' - typescript - dev: true - /@oclif/core@2.8.8(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-21U+WDgyb/xnefx9DWZhBHj5TlloZZiA1dVAE1Y8FGSAJwdArI4HqaNgp99BcyuaeX5XOz1tPeXoeB/j8uADcQ==} - engines: {node: '>=14.0.0'} + '@oclif/core@2.8.8(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@types/cli-progress': 3.11.0 ansi-escapes: 4.3.2 @@ -2383,11 +8259,8 @@ packages: - '@swc/wasm' - '@types/node' - typescript - dev: false - /@oclif/plugin-help@5.2.19(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-gf6/dFtzMJ8RA4ovlBCBGJsZsd4jPXhYWJho+Gh6KmA+Ev9LupoExbE0qT+a2uHJyHEvIg4uX/MBW3qdERD/8g==} - engines: {node: '>=12.0.0'} + '@oclif/plugin-help@5.2.19(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@oclif/core': 2.15.0(@types/node@20.3.3)(typescript@5.1.6) transitivePeerDependencies: @@ -2395,11 +8268,8 @@ packages: - '@swc/wasm' - '@types/node' - typescript - dev: true - /@oclif/plugin-not-found@2.4.1(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-LqW7qpw5Q8ploRiup2jEIMQJXcxHP1tpwj45GApKQMe7GRdGdRdjBT9Tu+U2tdEgMqgMplAIhOsYCx2nc2nMSw==} - engines: {node: '>=12.0.0'} + '@oclif/plugin-not-found@2.4.1(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@oclif/core': 2.15.0(@types/node@20.3.3)(typescript@5.1.6) chalk: 4.1.2 @@ -2409,11 +8279,8 @@ packages: - '@swc/wasm' - '@types/node' - typescript - dev: true - /@oclif/plugin-warn-if-update-available@2.1.0(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-liTWd/qSIqALsikr88CAB9o2xGFt0LdT5REbhxtrx16/trRmkxQ+0RHK1FieGZAzEENx/4D3YcC/Y67a0uyO0g==} - engines: {node: '>=12.0.0'} + '@oclif/plugin-warn-if-update-available@2.1.0(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@oclif/core': 2.15.0(@types/node@20.3.3)(typescript@5.1.6) chalk: 4.1.2 @@ -2427,11 +8294,8 @@ packages: - '@types/node' - supports-color - typescript - dev: true - /@oclif/test@2.3.26(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-oGvfgtreGcr5EIOGHv00PKO3eGpyJt2G6kqzuCH9NkJq4c/RngOmG8DEk/wXRN0gb3Y8AH+bQ6edJcW5/3jwKQ==} - engines: {node: '>=12.0.0'} + '@oclif/test@2.3.26(@types/node@20.3.3)(typescript@5.1.6)': dependencies: '@oclif/core': 2.8.11(@types/node@20.3.3)(typescript@5.1.6) fancy-test: 2.0.28 @@ -2441,124 +8305,88 @@ packages: - '@types/node' - supports-color - typescript - dev: true - /@octokit/auth-token@2.5.0: - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + '@octokit/auth-token@2.5.0': dependencies: '@octokit/types': 6.41.0 - dev: true - /@octokit/core@3.6.0: - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + '@octokit/core@3.6.0(encoding@0.1.13)': dependencies: '@octokit/auth-token': 2.5.0 - '@octokit/graphql': 4.8.0 - '@octokit/request': 5.6.3 + '@octokit/graphql': 4.8.0(encoding@0.1.13) + '@octokit/request': 5.6.3(encoding@0.1.13) '@octokit/request-error': 2.1.0 '@octokit/types': 6.41.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding - dev: true - /@octokit/endpoint@6.0.12: - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + '@octokit/endpoint@6.0.12': dependencies: '@octokit/types': 6.41.0 is-plain-object: 5.0.0 universal-user-agent: 6.0.0 - dev: true - /@octokit/graphql@4.8.0: - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + '@octokit/graphql@4.8.0(encoding@0.1.13)': dependencies: - '@octokit/request': 5.6.3 + '@octokit/request': 5.6.3(encoding@0.1.13) '@octokit/types': 6.41.0 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding - dev: true - /@octokit/openapi-types@12.11.0: - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - dev: true + '@octokit/openapi-types@12.11.0': {} - /@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0): - resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} - peerDependencies: - '@octokit/core': '>=2' + '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@octokit/core': 3.6.0 + '@octokit/core': 3.6.0(encoding@0.1.13) '@octokit/types': 6.41.0 - dev: true - /@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0): - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} - peerDependencies: - '@octokit/core': '>=3' + '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@octokit/core': 3.6.0 - dev: true + '@octokit/core': 3.6.0(encoding@0.1.13) - /@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0): - resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} - peerDependencies: - '@octokit/core': '>=3' + '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0(encoding@0.1.13))': dependencies: - '@octokit/core': 3.6.0 + '@octokit/core': 3.6.0(encoding@0.1.13) '@octokit/types': 6.41.0 deprecation: 2.3.1 - dev: true - /@octokit/request-error@2.1.0: - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + '@octokit/request-error@2.1.0': dependencies: '@octokit/types': 6.41.0 deprecation: 2.3.1 once: 1.4.0 - dev: true - /@octokit/request@5.6.3: - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + '@octokit/request@5.6.3(encoding@0.1.13)': dependencies: '@octokit/endpoint': 6.0.12 '@octokit/request-error': 2.1.0 '@octokit/types': 6.41.0 is-plain-object: 5.0.0 - node-fetch: 2.6.11 + node-fetch: 2.6.11(encoding@0.1.13) universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding - dev: true - /@octokit/rest@18.12.0: - resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + '@octokit/rest@18.12.0(encoding@0.1.13)': dependencies: - '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + '@octokit/core': 3.6.0(encoding@0.1.13) + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0(encoding@0.1.13)) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0(encoding@0.1.13)) transitivePeerDependencies: - encoding - dev: true - /@octokit/types@6.41.0: - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + '@octokit/types@6.41.0': dependencies: '@octokit/openapi-types': 12.11.0 - dev: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true + '@pkgjs/parseargs@0.11.0': optional: true - /@pkgr/utils@2.4.1: - resolution: {integrity: sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@pkgr/utils@2.4.1': dependencies: cross-spawn: 7.0.3 fast-glob: 3.2.12 @@ -2566,68 +8394,61 @@ packages: open: 9.1.0 picocolors: 1.0.0 tslib: 2.6.0 - dev: true - /@rushstack/eslint-patch@1.3.2: - resolution: {integrity: sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==} - dev: true + '@rushstack/eslint-patch@1.3.2': {} - /@sigstore/protobuf-specs@0.1.0: - resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@scure/base@1.1.6': {} - /@sigstore/tuf@1.0.0: - resolution: {integrity: sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@scure/bip32@1.3.3': + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@scure/bip39@1.2.2': + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.6 + + '@sigstore/protobuf-specs@0.1.0': {} + + '@sigstore/tuf@1.0.0': dependencies: '@sigstore/protobuf-specs': 0.1.0 make-fetch-happen: 11.1.1 tuf-js: 1.1.7 transitivePeerDependencies: - supports-color - dev: true - /@sinclair/typebox@0.25.24: - resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==} - dev: true + '@sinclair/typebox@0.25.24': {} - /@sindresorhus/is@4.6.0: - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - dev: true + '@sindresorhus/is@4.6.0': {} - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + '@sinonjs/commons@3.0.0': dependencies: type-detect: 4.0.8 - dev: true - /@sinonjs/fake-timers@10.1.0: - resolution: {integrity: sha512-w1qd368vtrwttm1PRJWPW1QHlbmHrVDGs1eBH/jZvRPUFS4MNXV9Q33EQdjOdeAxZ7O8+3wM7zxztm2nfUSyKw==} + '@sinonjs/fake-timers@10.1.0': dependencies: '@sinonjs/commons': 3.0.0 - dev: true - /@szmarczak/http-timer@4.0.6: - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} + '@szmarczak/http-timer@4.0.6': dependencies: defer-to-connect: 2.0.1 - dev: true - /@theguild/eslint-config@0.9.0(eslint@8.31.0)(typescript@5.1.6): - resolution: {integrity: sha512-rPYiVcAxT2j75wUm7nVrFw6oCpSdgFsS3PtVXfWKBhBb3JHSv2249t5SVPkvJKD3WRiVl4952KI5lh9tHT6JBg==} - peerDependencies: - eslint: ^8.24.0 + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@theguild/eslint-config@0.9.0(eslint@8.31.0)(typescript@5.1.6)': dependencies: '@rushstack/eslint-patch': 1.3.2 - '@typescript-eslint/eslint-plugin': 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.31.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 5.59.11(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint@8.31.0)(typescript@5.1.6) '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) eslint: 8.31.0 eslint-config-prettier: 8.8.0(eslint@8.31.0) - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-plugin-import@2.27.5)(eslint@8.31.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5)(eslint@8.31.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) eslint-plugin-jsonc: 2.9.0(eslint@8.31.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.31.0) eslint-plugin-mdx: 2.1.0(eslint@8.31.0) @@ -2643,304 +8464,192 @@ packages: - eslint-import-resolver-webpack - supports-color - typescript - dev: true - /@theguild/prettier-config@1.0.0(prettier@2.8.2): - resolution: {integrity: sha512-EdPbtrXN1Z0QqmFJZXGj4n/xLZTCJtDxb+jeNGmOccrv0cJTB46d+lsvCO8j7SmuUhyt/gv9B6nnVKt66D2X1w==} - peerDependencies: - prettier: ^2 + '@theguild/prettier-config@1.0.0(prettier@2.8.2)': dependencies: prettier: 2.8.2 prettier-plugin-pkg: 0.17.1(prettier@2.8.2) prettier-plugin-sh: 0.12.8(prettier@2.8.2) - dev: true - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true + '@tootallnate/once@1.1.2': {} - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + '@tootallnate/once@2.0.0': {} - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + '@tsconfig/node10@1.0.9': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tsconfig/node16@1.0.4': {} - /@tufjs/canonical-json@1.0.0: - resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + '@tufjs/canonical-json@1.0.0': {} - /@tufjs/models@1.0.4: - resolution: {integrity: sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + '@tufjs/models@1.0.4': dependencies: '@tufjs/canonical-json': 1.0.0 minimatch: 9.0.1 - dev: true - /@types/acorn@4.0.6: - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + '@types/acorn@4.0.6': dependencies: '@types/estree': 1.0.1 - dev: true - /@types/babel__core@7.20.1: - resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + '@types/babel__core@7.20.1': dependencies: '@babel/parser': 7.22.5 '@babel/types': 7.22.5 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 - dev: true - /@types/babel__generator@7.6.4: - resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + '@types/babel__generator@7.6.4': dependencies: '@babel/types': 7.22.5 - dev: true - /@types/babel__template@7.4.1: - resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + '@types/babel__template@7.4.1': dependencies: '@babel/parser': 7.22.5 '@babel/types': 7.22.5 - dev: true - /@types/babel__traverse@7.20.1: - resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} + '@types/babel__traverse@7.20.1': dependencies: '@babel/types': 7.22.5 - dev: true - /@types/cacheable-request@6.0.3: - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 20.3.3 + + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 '@types/node': 20.3.3 '@types/responselike': 1.0.0 - dev: true - /@types/chai@4.0.0: - resolution: {integrity: sha512-B56eI1x+Av9A7XHsgF0+WyLyBytAQqvdBoaULY3c4TGeKwLm43myB78EeBA8/VQn74KblXM4/ecmjTJJXUUF1A==} - dev: true + '@types/chai@4.0.0': {} - /@types/cli-progress@3.11.0: - resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} + '@types/cli-progress@3.11.0': dependencies: '@types/node': 20.3.3 - /@types/concat-stream@2.0.0: - resolution: {integrity: sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==} + '@types/concat-stream@2.0.0': dependencies: '@types/node': 20.3.3 - dev: true - /@types/debug@4.1.8: - resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + '@types/debug@4.1.8': dependencies: '@types/ms': 0.7.31 - dev: true - /@types/estree-jsx@1.0.0: - resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} + '@types/estree-jsx@1.0.0': dependencies: '@types/estree': 1.0.1 - dev: true - /@types/estree@1.0.1: - resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true + '@types/estree@1.0.1': {} - /@types/expect@1.20.4: - resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} - dev: true + '@types/expect@1.20.4': {} - /@types/graceful-fs@4.1.6: - resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + '@types/graceful-fs@4.1.6': dependencies: '@types/node': 20.3.3 - dev: true - /@types/hast@2.3.4: - resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} + '@types/hast@2.3.4': dependencies: '@types/unist': 2.0.6 - dev: true - /@types/http-cache-semantics@4.0.1: - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - dev: true + '@types/http-cache-semantics@4.0.1': {} - /@types/humps@2.0.2: - resolution: {integrity: sha512-FuyQoVNSW6mjSLxLVRq8YK1pi8P5zyL2pahEuCtMqlbmV4jyWYITz4eE2fZIErNovIfKU32tPbCl44VbOUaEiw==} - dev: true + '@types/humps@2.0.2': {} - /@types/is-ci@3.0.0: - resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} + '@types/is-ci@3.0.0': dependencies: ci-info: 3.8.0 - dev: true - /@types/is-empty@1.2.1: - resolution: {integrity: sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==} - dev: true + '@types/is-empty@1.2.1': {} - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} - dev: true + '@types/istanbul-lib-coverage@2.0.4': {} - /@types/istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + '@types/istanbul-lib-report@3.0.0': dependencies: '@types/istanbul-lib-coverage': 2.0.4 - dev: true - /@types/istanbul-reports@3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + '@types/istanbul-reports@3.0.1': dependencies: '@types/istanbul-lib-report': 3.0.0 - dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true + '@types/json-schema@7.0.12': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/keyv@3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/keyv@3.1.4': dependencies: '@types/node': 20.3.3 - dev: true - /@types/lodash@4.14.195: - resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} - dev: true + '@types/lodash@4.14.195': {} - /@types/mdast@3.0.11: - resolution: {integrity: sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw==} + '@types/mdast@3.0.11': dependencies: '@types/unist': 2.0.6 - dev: true - /@types/minimatch@3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - dev: true + '@types/minimatch@3.0.5': {} - /@types/minimist@1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} - dev: true + '@types/minimist@1.2.2': {} - /@types/mocha@9.0.0: - resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} - dev: true + '@types/mocha@9.0.0': {} - /@types/ms@0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - dev: true + '@types/ms@0.7.31': {} - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true + '@types/node@12.20.55': {} - /@types/node@15.14.9: - resolution: {integrity: sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==} - dev: true + '@types/node@15.14.9': {} - /@types/node@18.16.18: - resolution: {integrity: sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==} - dev: true + '@types/node@18.16.18': {} - /@types/node@20.3.3: - resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} + '@types/node@20.3.3': {} - /@types/normalize-package-data@2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - dev: true + '@types/normalize-package-data@2.4.1': {} - /@types/prettier@2.7.3: - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - dev: true + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 20.3.3 - /@types/responselike@1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + '@types/prettier@2.7.3': {} + + '@types/responselike@1.0.0': dependencies: '@types/node': 20.3.3 - dev: true - /@types/semver@6.2.3: - resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} - dev: true + '@types/secp256k1@4.0.6': + dependencies: + '@types/node': 20.3.3 - /@types/semver@7.5.0: - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} - dev: true + '@types/semver@6.2.3': {} - /@types/sinon@10.0.15: - resolution: {integrity: sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==} + '@types/semver@7.5.0': {} + + '@types/sinon@10.0.15': dependencies: '@types/sinonjs__fake-timers': 8.1.2 - dev: true - /@types/sinonjs__fake-timers@8.1.2: - resolution: {integrity: sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==} - dev: true + '@types/sinonjs__fake-timers@8.1.2': {} - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} - dev: true + '@types/stack-utils@2.0.1': {} - /@types/supports-color@8.1.1: - resolution: {integrity: sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==} - dev: true + '@types/supports-color@8.1.1': {} - /@types/unist@2.0.6: - resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - dev: true + '@types/unist@2.0.6': {} - /@types/vinyl@2.0.7: - resolution: {integrity: sha512-4UqPv+2567NhMQuMLdKAyK4yzrfCqwaTt6bLhHEs8PFcxbHILsrxaY63n4wgE/BRLDWDQeI+WcTmkXKExh9hQg==} + '@types/vinyl@2.0.7': dependencies: '@types/expect': 1.20.4 '@types/node': 20.3.3 - dev: true - /@types/yargs-parser@21.0.0: - resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - dev: true + '@types/yargs-parser@21.0.0': {} - /@types/yargs@17.0.24: - resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} + '@types/yargs@17.0.24': dependencies: '@types/yargs-parser': 21.0.0 - dev: true - /@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0)(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - '@typescript-eslint/parser': ^4.0.0 - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/experimental-utils': 4.33.0(eslint@8.42.0)(typescript@5.1.6) '@typescript-eslint/parser': 4.33.0(eslint@8.42.0)(typescript@5.1.6) @@ -2952,72 +8661,50 @@ packages: regexpp: 3.2.0 semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.31.0)(typescript@5.1.6): - resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) + '@typescript-eslint/parser': 4.33.0(eslint@8.42.0)(typescript@5.1.6) '@typescript-eslint/scope-manager': 5.59.11 - '@typescript-eslint/type-utils': 5.59.11(eslint@8.31.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.59.11(eslint@8.31.0)(typescript@5.1.6) + '@typescript-eslint/type-utils': 5.59.11(eslint@8.42.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.59.11(eslint@8.42.0)(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.31.0 + eslint: 8.42.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.4 + semver: 7.5.2 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint@8.31.0)(typescript@5.1.6)': dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.11(eslint@8.42.0)(typescript@5.1.6) + '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) '@typescript-eslint/scope-manager': 5.59.11 - '@typescript-eslint/type-utils': 5.59.11(eslint@8.42.0)(typescript@5.1.6) - '@typescript-eslint/utils': 5.59.11(eslint@8.42.0)(typescript@5.1.6) + '@typescript-eslint/type-utils': 5.59.11(eslint@8.31.0)(typescript@5.1.6) + '@typescript-eslint/utils': 5.59.11(eslint@8.31.0)(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.42.0 + eslint: 8.31.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.2 + semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/experimental-utils@4.33.0(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: '*' + '@typescript-eslint/experimental-utils@4.33.0(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@types/json-schema': 7.0.12 '@typescript-eslint/scope-manager': 4.33.0 @@ -3029,142 +8716,82 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/scope-manager': 4.33.0 '@typescript-eslint/types': 4.33.0 '@typescript-eslint/typescript-estree': 4.33.0(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) eslint: 8.42.0 + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6): - resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/scope-manager': 5.59.11 '@typescript-eslint/types': 5.59.11 '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) eslint: 8.31.0 + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@5.59.11(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@5.59.11(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/scope-manager': 5.59.11 '@typescript-eslint/types': 5.59.11 '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) eslint: 8.42.0 + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@4.33.0: - resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + '@typescript-eslint/scope-manager@4.33.0': dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 - dev: true - /@typescript-eslint/scope-manager@5.59.11: - resolution: {integrity: sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.59.11': dependencies: '@typescript-eslint/types': 5.59.11 '@typescript-eslint/visitor-keys': 5.59.11 - dev: true - - /@typescript-eslint/type-utils@5.59.11(eslint@8.31.0)(typescript@5.1.6): - resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + + '@typescript-eslint/type-utils@5.59.11(eslint@8.31.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.6) '@typescript-eslint/utils': 5.59.11(eslint@8.31.0)(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) eslint: 8.31.0 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/type-utils@5.59.11(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@5.59.11(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@typescript-eslint/typescript-estree': 5.59.11(typescript@5.1.6) '@typescript-eslint/utils': 5.59.11(eslint@8.42.0)(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) eslint: 8.42.0 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@4.33.0: - resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - dev: true + '@typescript-eslint/types@4.33.0': {} - /@typescript-eslint/types@5.59.11: - resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/types@5.59.11': {} - /@typescript-eslint/typescript-estree@4.33.0(typescript@5.1.6): - resolution: {integrity: sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@4.33.0(typescript@5.1.6)': dependencies: '@typescript-eslint/types': 4.33.0 '@typescript-eslint/visitor-keys': 4.33.0 @@ -3173,19 +8800,12 @@ packages: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.6): - resolution: {integrity: sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@5.59.11(typescript@5.1.6)': dependencies: '@typescript-eslint/types': 5.59.11 '@typescript-eslint/visitor-keys': 5.59.11 @@ -3194,16 +8814,12 @@ packages: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) + optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.59.11(eslint@8.31.0)(typescript@5.1.6): - resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.59.11(eslint@8.31.0)(typescript@5.1.6)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.31.0) '@types/json-schema': 7.0.12 @@ -3217,13 +8833,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@5.59.11(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.59.11(eslint@8.42.0)(typescript@5.1.6)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@types/json-schema': 7.0.12 @@ -3237,331 +8848,223 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@4.33.0: - resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} - engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + '@typescript-eslint/visitor-keys@4.33.0': dependencies: '@typescript-eslint/types': 4.33.0 eslint-visitor-keys: 2.1.0 - dev: true - /@typescript-eslint/visitor-keys@5.59.11: - resolution: {integrity: sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@5.59.11': dependencies: '@typescript-eslint/types': 5.59.11 eslint-visitor-keys: 3.4.1 - dev: true - /@ungap/promise-all-settled@1.1.2: - resolution: {integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==} - dev: true + '@ungap/promise-all-settled@1.1.2': {} - /abbrev@1.1.1: - resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true + abbrev@1.1.1: {} - /abbrev@2.0.0: - resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + abbrev@2.0.0: {} - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - dev: true - /acorn-jsx@5.3.2(acorn@8.9.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + abortcontroller-polyfill@1.7.5: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-jsx@5.3.2(acorn@8.9.0): dependencies: acorn: 8.9.0 - dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} - engines: {node: '>=0.4.0'} + acorn-walk@8.2.0: {} - /acorn@8.9.0: - resolution: {integrity: sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==} - engines: {node: '>=0.4.0'} - hasBin: true + acorn@8.9.0: {} - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2: dependencies: debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /agentkeepalive@4.3.0: - resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} - engines: {node: '>= 8.0.0'} + agentkeepalive@4.3.0: dependencies: debug: 4.3.4(supports-color@8.1.1) depd: 2.0.0 humanize-ms: 1.2.1 transitivePeerDependencies: - supports-color - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.1: {} - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} + ansi-escapes@3.2.0: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - /ansi-regex@3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - dev: true + ansi-regex@3.0.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + ansi-regex@5.0.1: {} - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} + ansi-regex@6.0.1: {} - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-sequence-parser@1.1.1: {} + + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - /ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true + ansi-styles@5.2.0: {} - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + ansi-styles@6.2.1: {} - /ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + ansicolors@0.3.2: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} - dev: true + aproba@2.0.0: {} - /are-we-there-yet@2.0.0: - resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} - engines: {node: '>=10'} + are-we-there-yet@2.0.0: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 - dev: true - /are-we-there-yet@3.0.1: - resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + are-we-there-yet@3.0.1: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 - dev: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + arg@4.1.3: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /aria-query@5.2.1: - resolution: {integrity: sha512-7uFg4b+lETFgdaJyETnILsXgnnzVnkHcgRbwbPwevm5x/LmUlt3MjczMRe1zg824iBgXZNRPTBftNYyRSKLp2g==} + aria-query@5.2.1: dependencies: dequal: 2.0.3 - dev: true - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + array-buffer-byte-length@1.0.0: dependencies: call-bind: 1.0.2 is-array-buffer: 3.0.2 - dev: true - /array-differ@3.0.0: - resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} - engines: {node: '>=8'} - dev: true + array-differ@3.0.0: {} - /array-includes@3.1.6: - resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} - engines: {node: '>= 0.4'} + array-flatten@1.1.1: {} + + array-includes@3.1.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 get-intrinsic: 1.2.1 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} + array-union@2.1.0: {} - /array.prototype.flat@1.3.1: - resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.1: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.flatmap@1.3.1: - resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.1: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 - dev: true - /array.prototype.tosorted@1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} + array.prototype.tosorted@1.1.1: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.1 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: true + arrify@2.0.1: {} - /as-proto-gen@1.3.0: - resolution: {integrity: sha512-dHuDXVq9CXpvCA+jJqN4fmH3fKrRfV/voQkKRUP6qUAGEvYRPkujuN4PgGqRn1VoiFnR0EWqgr8Vsk7oa0EexA==} - hasBin: true + as-proto-gen@1.3.0: dependencies: '@types/humps': 2.0.2 fs-extra: 10.1.0 google-protobuf: 3.21.2 humps: 2.0.1 prettier: 2.8.2 - dev: true - /as-proto@1.3.0: - resolution: {integrity: sha512-Lo3x+OHMScDUX7I3meKf8tNUrMffLIZp6S7bhkbZPEVK9F2uLhoYcUHnYLjNLjmk7SOyofGtiGFJ7SmAwVMwAg==} - dev: false + as-proto@1.3.0: {} - /asap@2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true + asap@2.0.6: {} - /assemblyscript@0.27.9: - resolution: {integrity: sha512-cFE/AMjVtBQ2iKFZPu/a3Z/KJzGex61C+X+y3GuLJ8Hr9Zdf46sy/JlIl6ikothQd2umM9CQDAD/uAPAEHL+oA==} - engines: {node: '>=16', npm: '>=7'} - hasBin: true + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assemblyscript@0.27.27: + dependencies: + binaryen: 116.0.0-nightly.20240114 + long: 5.2.3 + + assemblyscript@0.27.9: dependencies: binaryen: 112.0.0-nightly.20230411 long: 5.2.3 - dev: false - /assertion-error@1.1.0: - resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} - dev: true + assert-plus@1.0.0: {} - /ast-types-flow@0.0.7: - resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - dev: true + assertion-error@1.1.0: {} - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + ast-types-flow@0.0.7: {} - /async-retry@1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + astral-regex@2.0.0: {} + + async-limiter@1.0.1: {} + + async-retry@1.3.3: dependencies: retry: 0.13.1 - dev: true - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + async@3.2.4: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} + asynckit@0.4.0: {} - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + at-least-node@1.0.0: {} - /aws-sdk@2.1408.0: - resolution: {integrity: sha512-goz0xgpRVm4pH89CSUvw2S4ed+XTnGF9/2x/nE3Rl6JEHiiz9wz430RhESTo6AbDTXrONUOUcwwG+U0G2ev7ow==} - engines: {node: '>= 10.0.0'} + available-typed-arrays@1.0.5: {} + + aws-sdk@2.1408.0: dependencies: buffer: 4.9.2 events: 1.1.1 @@ -3573,24 +9076,18 @@ packages: util: 0.12.5 uuid: 8.0.0 xml2js: 0.5.0 - dev: true - /axe-core@4.7.2: - resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} - engines: {node: '>=4'} - dev: true + aws-sign2@0.7.0: {} - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + aws4@1.12.0: {} + + axe-core@4.7.2: {} + + axobject-query@3.2.1: dependencies: dequal: 2.0.3 - dev: true - /babel-jest@29.3.1(@babel/core@7.20.5): - resolution: {integrity: sha512-aard+xnMoxgjwV70t0L6wkW/3HQQtV+O0PEimxKgzNqCJnbYmroPojdP2tqKSOAt8QAKV/uSZU8851M7B5+fcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@29.3.1(@babel/core@7.20.5): dependencies: '@babel/core': 7.20.5 '@jest/transform': 29.5.0 @@ -3602,13 +9099,8 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-jest@29.5.0(@babel/core@7.20.5): - resolution: {integrity: sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.8.0 + babel-jest@29.5.0(@babel/core@7.20.5): dependencies: '@babel/core': 7.20.5 '@jest/transform': 29.5.0 @@ -3620,11 +9112,8 @@ packages: slash: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-istanbul@6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} + babel-plugin-istanbul@6.1.1: dependencies: '@babel/helper-plugin-utils': 7.22.5 '@istanbuljs/load-nyc-config': 1.1.0 @@ -3633,22 +9122,15 @@ packages: test-exclude: 6.0.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-jest-hoist@29.5.0: - resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-jest-hoist@29.5.0: dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 '@types/babel__core': 7.20.1 '@types/babel__traverse': 7.20.1 - dev: true - /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.20.5): - resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.20.5): dependencies: '@babel/compat-data': 7.22.5 '@babel/core': 7.20.5 @@ -3656,35 +9138,23 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.20.5): - resolution: {integrity: sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-corejs3@0.6.0(@babel/core@7.20.5): dependencies: '@babel/core': 7.20.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.5) core-js-compat: 3.31.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.20.5): - resolution: {integrity: sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + babel-plugin-polyfill-regenerator@0.4.1(@babel/core@7.20.5): dependencies: '@babel/core': 7.20.5 '@babel/helper-define-polyfill-provider': 0.3.3(@babel/core@7.20.5) transitivePeerDependencies: - supports-color - dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.20.5): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.20.5): dependencies: '@babel/core': 7.20.5 '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.5) @@ -3699,49 +9169,38 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.20.5) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.20.5) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.20.5) - dev: true - /babel-preset-jest@29.5.0(@babel/core@7.20.5): - resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@babel/core': ^7.0.0 + babel-preset-jest@29.5.0(@babel/core@7.20.5): dependencies: '@babel/core': 7.20.5 babel-plugin-jest-hoist: 29.5.0 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.5) - dev: true - /bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - dev: true + bail@2.0.2: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base-x@3.0.9: + dependencies: + safe-buffer: 5.2.1 - /before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - dev: true + base64-js@1.5.1: {} - /better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + before-after-hook@2.2.3: {} + + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 - dev: true - /big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - dev: true + big-integer@1.6.51: {} - /bin-links@3.0.3: - resolution: {integrity: sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + bignumber.js@9.1.2: {} + + bin-links@3.0.3: dependencies: cmd-shim: 5.0.0 mkdirp-infer-owner: 2.0.0 @@ -3749,133 +9208,144 @@ packages: read-cmd-shim: 3.0.1 rimraf: 3.0.2 write-file-atomic: 4.0.2 - dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.2.0: {} - /binaryen@112.0.0-nightly.20230411: - resolution: {integrity: sha512-4V9r9x9fjAVFZdR2yvBFc3BEJJIBYvd2X8X8k0zAuJsao2gl9wNHDmpQ30QsLo6hgkRfRImkCbCjhXW3RDOYXQ==} - hasBin: true - dev: false + binaryen@112.0.0-nightly.20230411: {} - /binaryextensions@4.18.0: - resolution: {integrity: sha512-PQu3Kyv9dM4FnwB7XGj1+HucW+ShvJzJqjuw1JkKVs1mWdwOKVcRjOi+pV9X52A0tNvrPCsPkbFFQb+wE1EAXw==} - engines: {node: '>=0.8'} - dev: true + binaryen@116.0.0-nightly.20240114: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + binaryextensions@4.18.0: {} + + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} + blakejs@1.2.1: {} + + bluebird@3.7.2: {} + + bn.js@4.11.6: {} + + bn.js@4.12.0: {} + + bn.js@5.2.1: {} + + body-parser@1.20.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bplist-parser@0.2.0: dependencies: big-integer: 1.6.51 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - /breakword@1.0.6: - resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} + breakword@1.0.6: dependencies: wcwidth: 1.0.1 - dev: true - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true + brorand@1.1.0: {} - /browserslist@4.21.9: - resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browser-stdout@1.3.1: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserslist@4.21.9: dependencies: caniuse-lite: 1.0.30001504 electron-to-chromium: 1.4.433 node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) - dev: true - /bser@2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + bs58@4.0.1: + dependencies: + base-x: 3.0.9 + + bs58check@2.1.2: + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + bser@2.1.1: dependencies: node-int64: 0.4.0 - dev: true - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@4.9.2: - resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + buffer-to-arraybuffer@0.0.5: {} + + buffer-xor@1.0.3: {} + + buffer@4.9.2: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 isarray: 1.0.0 - dev: true - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + bufferutil@4.0.8: + dependencies: + node-gyp-build: 4.8.0 - /builtins@1.0.3: - resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==} - dev: true + builtin-modules@3.3.0: {} - /builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + builtins@1.0.3: {} + + builtins@5.0.1: dependencies: semver: 7.5.4 - dev: true - /bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} + bundle-name@3.0.0: dependencies: run-applescript: 5.0.0 - dev: true - /cacache@15.3.0: - resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} - engines: {node: '>= 10'} + bytes@3.1.2: {} + + cacache@15.3.0: dependencies: '@npmcli/fs': 1.1.1 '@npmcli/move-file': 1.1.2 @@ -3897,11 +9367,8 @@ packages: unique-filename: 1.1.1 transitivePeerDependencies: - bluebird - dev: true - /cacache@16.1.3: - resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + cacache@16.1.3: dependencies: '@npmcli/fs': 2.1.2 '@npmcli/move-file': 2.0.1 @@ -3923,11 +9390,8 @@ packages: unique-filename: 2.0.1 transitivePeerDependencies: - bluebird - dev: true - /cacache@17.1.3: - resolution: {integrity: sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + cacache@17.1.3: dependencies: '@npmcli/fs': 3.1.0 fs-minipass: 3.0.2 @@ -3941,16 +9405,12 @@ packages: ssri: 10.0.4 tar: 6.1.15 unique-filename: 3.0.0 - dev: true - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - dev: true + cacheable-lookup@5.0.4: {} - /cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + cacheable-lookup@6.1.0: {} + + cacheable-request@7.0.4: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -3959,57 +9419,36 @@ packages: lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 - dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.2: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} + camelcase-keys@6.2.2: dependencies: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: true - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-lite@1.0.30001504: - resolution: {integrity: sha512-5uo7eoOp2mKbWyfMXnGO9rJWOGU8duvzEiYITW+wivukL7yHH4gX9yuRaobu6El4jPxo6jKZfG+N6fB621GD/Q==} - dev: true + caniuse-lite@1.0.30001504: {} - /cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true + cardinal@2.1.1: dependencies: ansicolors: 0.3.2 redeyed: 2.1.1 - /ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - dev: true + caseless@0.12.0: {} - /chai@4.0.0: - resolution: {integrity: sha512-FQdXBx+UlDU1RljcWV3/ha2Mm+ooF9IQApHXZA1Az+XYItNtzYPR7e1Ga6WwjTkhCPrE6WhvaCU6b4ljGKbgoQ==} - engines: {node: '>=4'} + ccount@2.0.1: {} + + chai@4.0.0: dependencies: assertion-error: 1.1.0 check-error: 1.0.2 @@ -4017,68 +9456,39 @@ packages: get-func-name: 2.0.0 pathval: 1.1.1 type-detect: 4.0.8 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true + char-regex@1.0.2: {} - /character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: true + character-entities-html4@2.1.0: {} - /character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - dev: true + character-entities-legacy@1.1.4: {} - /character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: true + character-entities-legacy@3.0.0: {} - /character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - dev: true + character-entities@1.2.4: {} - /character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - dev: true + character-entities@2.0.2: {} - /character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - dev: true + character-reference-invalid@1.1.4: {} - /character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - dev: true + character-reference-invalid@2.0.1: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /check-error@1.0.2: - resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} - dev: true + check-error@1.0.2: {} - /chokidar@3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} - engines: {node: '>= 8.10.0'} + chokidar@3.5.1: dependencies: anymatch: 3.1.3 braces: 3.0.2 @@ -4089,203 +9499,136 @@ packages: readdirp: 3.5.0 optionalDependencies: fsevents: 2.3.2 - dev: true - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chownr@1.1.4: {} - /ci-info@3.8.0: - resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} - engines: {node: '>=8'} - dev: true + chownr@2.0.0: {} - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - dev: true + ci-info@3.8.0: {} - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + cids@0.7.5: + dependencies: + buffer: 5.7.1 + class-is: 1.1.0 + multibase: 0.6.1 + multicodec: 1.0.4 + multihashes: 0.4.21 + + cipher-base@1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + cjs-module-lexer@1.2.3: {} + + class-is@1.1.0: {} + + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /clean-stack@3.0.1: - resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} - engines: {node: '>=10'} + clean-stack@3.0.1: dependencies: escape-string-regexp: 4.0.0 - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-progress@3.12.0: - resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} - engines: {node: '>=4'} + cli-progress@3.12.0: dependencies: string-width: 4.2.3 - /cli-spinners@2.9.0: - resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.0: {} - /cli-table@0.3.11: - resolution: {integrity: sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ==} - engines: {node: '>= 0.2.0'} + cli-table@0.3.11: dependencies: colors: 1.0.3 - dev: true - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cli-width@3.0.0: {} - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@6.0.0: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-buffer@1.0.0: - resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} - engines: {node: '>= 0.10'} - dev: true + clone-buffer@1.0.0: {} - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone-response@1.0.3: dependencies: mimic-response: 1.0.1 - dev: true - /clone-stats@1.0.0: - resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} - dev: true + clone-stats@1.0.0: {} - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true + clone@2.1.2: {} - /cloneable-readable@1.1.3: - resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} + cloneable-readable@1.1.3: dependencies: inherits: 2.0.4 process-nextick-args: 2.0.1 readable-stream: 2.3.8 - dev: true - /cmd-shim@5.0.0: - resolution: {integrity: sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + cmd-shim@5.0.0: dependencies: mkdirp-infer-owner: 2.0.0 - dev: true - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /collect-v8-coverage@1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true + collect-v8-coverage@1.0.1: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /color-support@1.1.3: - resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} - hasBin: true - dev: true + color-support@1.1.3: {} - /colors@1.0.3: - resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} - engines: {node: '>=0.1.90'} - dev: true + colors@1.0.3: {} - /commander@7.1.0: - resolution: {integrity: sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==} - engines: {node: '>= 10'} - dev: true + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 - /common-ancestor-path@1.0.1: - resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} - dev: true + commander@7.1.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + common-ancestor-path@1.0.1: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + commondir@1.0.1: {} - /concat-stream@2.0.0: - resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} - engines: {'0': node >= 6.0} + concat-map@0.0.1: {} + + concat-stream@2.0.0: dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 3.6.2 typedarray: 0.0.6 - dev: true - /concurrently@7.6.0: - resolution: {integrity: sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==} - engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} - hasBin: true + concurrently@7.6.0: dependencies: chalk: 4.1.2 date-fns: 2.30.0 @@ -4296,53 +9639,78 @@ packages: supports-color: 8.1.1 tree-kill: 1.2.2 yargs: 17.7.2 - dev: true - /confusing-browser-globals@1.0.10: - resolution: {integrity: sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==} - dev: true + confusing-browser-globals@1.0.10: {} - /console-control-strings@1.1.0: - resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - dev: true + console-control-strings@1.1.0: {} - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true + content-hash@2.5.2: + dependencies: + cids: 0.7.5 + multicodec: 0.5.7 + multihashes: 0.4.21 - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + content-type@1.0.5: {} - /core-js-compat@3.31.0: - resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.6.0: {} + + core-js-compat@3.31.0: dependencies: browserslist: 4.21.9 - dev: true - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.2: {} - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + core-util-is@1.0.3: {} - /cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + crc-32@1.2.2: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + create-require@1.1.1: {} + + cross-fetch@3.1.8(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + cross-spawn@6.0.5: dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -4350,354 +9718,245 @@ packages: shebang-command: 1.2.0 which: 1.3.1 - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - /csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: true + csv-generate@3.4.3: {} - /csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: true + csv-parse@4.16.3: {} - /csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: true + csv-stringify@5.6.5: {} - /csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} - engines: {node: '>= 0.1.90'} + csv@5.5.3: dependencies: csv-generate: 3.4.3 csv-parse: 4.16.3 csv-stringify: 5.6.5 stream-transform: 2.1.3 - dev: true - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.2 - /dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dev: true + damerau-levenshtein@1.0.8: {} - /dataloader@1.4.0: - resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - dev: true + dargs@7.0.0: {} - /date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + dataloader@1.4.0: {} + + date-fns@2.30.0: dependencies: '@babel/runtime': 7.22.5 - dev: true - /dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - dev: true + dateformat@4.6.3: {} - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.3.1(supports-color@8.1.1): - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.1(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 - dev: true - /debug@4.3.4(supports-color@8.1.1): - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 - /debuglog@1.0.1: - resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - dev: true + debuglog@1.0.1: {} - /decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} - dev: true + decamelize@4.0.0: {} - /decode-named-character-reference@1.0.2: - resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + decode-named-character-reference@1.0.2: dependencies: character-entities: 2.0.2 - dev: true - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decode-uri-component@0.2.2: {} + + decompress-response@3.3.0: + dependencies: + mimic-response: 1.0.1 + + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: true - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} - dev: true + dedent@0.7.0: {} - /deep-eql@2.0.2: - resolution: {integrity: sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==} - engines: {node: '>=0.12'} + deep-eql@2.0.2: dependencies: type-detect: 3.0.0 - dev: true - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true + deep-extend@0.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} + default-browser-id@3.0.0: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: true - /default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} + default-browser@4.0.0: dependencies: bundle-name: 3.0.0 default-browser-id: 3.0.0 execa: 7.1.1 titleize: 3.0.0 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: true + defer-to-connect@2.0.1: {} - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true + define-lazy-prop@3.0.0: {} - /define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} + define-properties@1.2.0: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 - dev: true - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true + delayed-stream@1.0.0: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + delegates@1.0.0: {} - /deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - dev: true + depd@2.0.0: {} - /dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - dev: true + deprecation@2.3.1: {} - /detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true + dequal@2.0.3: {} - /detect-newline@3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true + destroy@1.2.0: {} - /dezalgo@1.0.4: - resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + detect-indent@6.1.0: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: dependencies: asap: 2.0.6 wrappy: 1.0.2 - dev: true - /diff-sequences@29.4.3: - resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + diff-sequences@29.4.3: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + diff@4.0.2: {} - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.0.0: {} - /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.1.0: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + dom-walk@0.1.2: {} + + dotenv@8.6.0: {} + + eastasianwidth@0.2.0: {} + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ee-first@1.1.1: {} + + ejs@3.1.9: dependencies: - esutils: 2.0.3 - dev: true + jake: 10.8.7 - /dotenv@8.6.0: - resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} - engines: {node: '>=10'} - dev: true + electron-to-chromium@1.4.433: {} - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} - engines: {node: '>=0.10.0'} - hasBin: true + elliptic@6.5.5: dependencies: - jake: 10.8.7 + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 - /electron-to-chromium@1.4.433: - resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} - dev: true + emittery@0.13.1: {} - /emittery@0.13.1: - resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} - engines: {node: '>=12'} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@9.2.2: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encodeurl@1.0.2: {} - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - requiresBuild: true + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - dev: true optional: true - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.15.0: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /enquirer@2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} + enquirer@2.3.6: dependencies: ansi-colors: 4.1.3 - dev: true - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true + env-paths@2.2.1: {} - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true + err-code@2.0.3: {} - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /error@10.4.0: - resolution: {integrity: sha512-YxIFEJuhgcICugOUvRx5th0UM+ActZ9sjY0QJmeVwsQdvosZ7kYzc9QqS0Da3R5iUmgU5meGIxh0xBeZpMVeLw==} - dev: true + error@10.4.0: {} - /es-abstract@1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} - engines: {node: '>= 0.4'} + es-abstract@1.21.2: dependencies: array-buffer-byte-length: 1.0.0 available-typed-arrays: 1.0.5 @@ -4733,56 +9992,56 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.9 - dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.1: dependencies: get-intrinsic: 1.2.1 has: 1.0.3 has-tostringtag: 1.0.0 - dev: true - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + es-shim-unscopables@1.0.0: dependencies: has: 1.0.3 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true + es6-promise@4.2.8: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 - /eslint-config-oclif-typescript@1.0.3(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-TeJKXWBQ3uKMtzgz++UFNWpe1WCx8mfqRuzZy1LirREgRlVv656SkVG4gNZat5rRNIQgfDmTS+YebxK02kfylA==} - engines: {node: '>=12.0.0'} + escalade@3.1.1: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-oclif-typescript@1.0.3(eslint@8.42.0)(typescript@5.1.6): dependencies: - '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0)(eslint@8.42.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 4.33.0(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6) '@typescript-eslint/parser': 4.33.0(eslint@8.42.0)(typescript@5.1.6) eslint-config-xo-space: 0.29.0(eslint@8.42.0) eslint-plugin-mocha: 9.0.0(eslint@8.42.0) @@ -4791,11 +10050,8 @@ packages: - eslint - supports-color - typescript - dev: true - /eslint-config-oclif@4.0.0(eslint@8.42.0): - resolution: {integrity: sha512-5tkUQeC33rHAhJxaGeBGYIflDLumeV2qD/4XLBdXhB/6F/+Jnwdce9wYHSvkx0JUqUQShpQv8JEVkBp/zzD7hg==} - engines: {node: '>=12.0.0'} + eslint-config-oclif@4.0.0(eslint@8.42.0): dependencies: eslint-config-xo-space: 0.27.0(eslint@8.42.0) eslint-plugin-mocha: 9.0.0(eslint@8.42.0) @@ -4804,124 +10060,70 @@ packages: transitivePeerDependencies: - eslint - supports-color - dev: true - /eslint-config-prettier@8.8.0(eslint@8.31.0): - resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@8.8.0(eslint@8.31.0): dependencies: eslint: 8.31.0 - dev: true - /eslint-config-standard-with-typescript@35.0.0(@typescript-eslint/eslint-plugin@5.59.11)(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.42.0)(typescript@5.1.6): - resolution: {integrity: sha512-Xa7DY9GgduZyp0qmXxBF0/dB+Vm4/DgWu1lGpNLJV2d46aCaUxTKDEnkzjUWX/1O9S0a+Dhnw7A4oI0JpYzwtw==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.50.0 - eslint: ^8.0.1 - eslint-plugin-import: ^2.25.2 - eslint-plugin-n: ^15.0.0 - eslint-plugin-promise: ^6.0.0 - typescript: '*' + eslint-config-standard-with-typescript@35.0.0(@typescript-eslint/eslint-plugin@5.59.11(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0))(eslint-plugin-n@15.7.0(eslint@8.42.0))(eslint-plugin-promise@6.1.1(eslint@8.42.0))(eslint@8.42.0)(typescript@5.1.6): dependencies: - '@typescript-eslint/eslint-plugin': 5.59.11(@typescript-eslint/parser@5.59.11)(eslint@8.42.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 5.59.11(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)(typescript@5.1.6) '@typescript-eslint/parser': 5.59.11(eslint@8.42.0)(typescript@5.1.6) eslint: 8.42.0 - eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.42.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint@8.42.0) + eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0))(eslint-plugin-n@15.7.0(eslint@8.42.0))(eslint-plugin-promise@6.1.1(eslint@8.42.0))(eslint@8.42.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0) eslint-plugin-n: 15.7.0(eslint@8.42.0) eslint-plugin-promise: 6.1.1(eslint@8.42.0) typescript: 5.1.6 transitivePeerDependencies: - supports-color - dev: true - /eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.42.0): - resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} - peerDependencies: - eslint: ^8.0.1 - eslint-plugin-import: ^2.25.2 - eslint-plugin-n: ^15.0.0 - eslint-plugin-promise: ^6.0.0 + eslint-config-standard@17.0.0(eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0))(eslint-plugin-n@15.7.0(eslint@8.42.0))(eslint-plugin-promise@6.1.1(eslint@8.42.0))(eslint@8.42.0): dependencies: eslint: 8.42.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint@8.42.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0) eslint-plugin-n: 15.7.0(eslint@8.42.0) eslint-plugin-promise: 6.1.1(eslint@8.42.0) - dev: true - /eslint-config-xo-space@0.27.0(eslint@8.42.0): - resolution: {integrity: sha512-b8UjW+nQyOkhiANVpIptqlKPyE7XRyQ40uQ1NoBhzVfu95gxfZGrpliq8ZHBpaOF2wCLZaexTSjg7Rvm99vj4A==} - engines: {node: '>=10'} - peerDependencies: - eslint: '>=7.20.0' + eslint-config-xo-space@0.27.0(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-config-xo: 0.35.0(eslint@8.42.0) - dev: true - /eslint-config-xo-space@0.29.0(eslint@8.42.0): - resolution: {integrity: sha512-emUZVHjmzl3I1aO2M/2gEpqa/GHXTl7LF/vQeAX4W+mQIU+2kyqY97FkMnSc2J8Osoq+vCSXCY/HjFUmFIF/Ag==} - engines: {node: '>=10'} - peerDependencies: - eslint: '>=7.32.0' + eslint-config-xo-space@0.29.0(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-config-xo: 0.38.0(eslint@8.42.0) - dev: true - /eslint-config-xo@0.35.0(eslint@8.42.0): - resolution: {integrity: sha512-+WyZTLWUJlvExFrBU/Ldw8AB/S0d3x+26JQdBWbcqig2ZaWh0zinYcHok+ET4IoPaEcRRf3FE9kjItNVjBwnAg==} - engines: {node: '>=10'} - peerDependencies: - eslint: '>=7.20.0' + eslint-config-xo@0.35.0(eslint@8.42.0): dependencies: confusing-browser-globals: 1.0.10 eslint: 8.42.0 - dev: true - /eslint-config-xo@0.38.0(eslint@8.42.0): - resolution: {integrity: sha512-G2jL+VyfkcZW8GoTmqLsExvrWssBedSoaQQ11vyhflDeT3csMdBVp0On+AVijrRuvgmkWeDwwUL5Rj0qDRHK6g==} - engines: {node: '>=10'} - peerDependencies: - eslint: '>=7.20.0' + eslint-config-xo@0.38.0(eslint@8.42.0): dependencies: confusing-browser-globals: 1.0.10 eslint: 8.42.0 - dev: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.27.5): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0)): dependencies: - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint@8.42.0) - dev: true + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0) - /eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + eslint-import-resolver-node@0.3.7: dependencies: debug: 3.2.7 is-core-module: 2.12.1 resolve: 1.22.2 transitivePeerDependencies: - supports-color - dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11)(eslint-plugin-import@2.27.5)(eslint@8.31.0): - resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' + eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5)(eslint@8.31.0): dependencies: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.15.0 eslint: 8.31.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5)(eslint@8.31.0))(eslint@8.31.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) get-tsconfig: 4.6.0 globby: 13.2.0 is-core-module: 2.12.1 @@ -4932,13 +10134,8 @@ packages: - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-mdx@2.1.0(eslint@8.31.0): - resolution: {integrity: sha512-dVLHDcpCFJRXZhxEQx8nKc68KT1qm+9JOeMD+j1/WW2h+oco1j7Qq+CLrX2kP64LI3fF9TUtj7a0AvncHUME6w==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8.0.0' + eslint-mdx@2.1.0(eslint@8.31.0): dependencies: acorn: 8.9.0 acorn-jsx: 5.3.2(acorn@8.9.0) @@ -4957,119 +10154,56 @@ packages: vfile: 5.3.7 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.0(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint@8.42.0): dependencies: - '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) debug: 3.2.7 - eslint: 8.31.0 + optionalDependencies: + '@typescript-eslint/parser': 4.33.0(eslint@8.42.0)(typescript@5.1.6) + eslint: 8.42.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11)(eslint-plugin-import@2.27.5)(eslint@8.31.0) transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint@8.42.0): - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5)(eslint@8.31.0))(eslint@8.31.0): dependencies: - '@typescript-eslint/parser': 5.59.11(eslint@8.42.0)(typescript@5.1.6) debug: 3.2.7 - eslint: 8.42.0 + optionalDependencies: + '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) + eslint: 8.31.0 eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5)(eslint@8.31.0) transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-es@3.0.1(eslint@8.42.0): - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-es@3.0.1(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - dev: true - /eslint-plugin-es@4.1.0(eslint@8.31.0): - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-es@4.1.0(eslint@8.31.0): dependencies: eslint: 8.31.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - dev: true - /eslint-plugin-es@4.1.0(eslint@8.42.0): - resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-es@4.1.0(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-utils: 2.1.0 regexpp: 3.2.0 - dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.27.5(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint@8.42.0): dependencies: - '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.31.0 + eslint: 8.42.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@4.33.0(eslint@8.42.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint@8.42.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 @@ -5078,31 +10212,23 @@ packages: resolve: 1.22.2 semver: 6.3.0 tsconfig-paths: 3.14.2 + optionalDependencies: + '@typescript-eslint/parser': 4.33.0(eslint@8.42.0)(typescript@5.1.6) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.11)(eslint@8.42.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0): dependencies: - '@typescript-eslint/parser': 5.59.11(eslint@8.42.0)(typescript@5.1.6) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.42.0 + eslint: 8.31.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11)(eslint-import-resolver-node@0.3.7)(eslint@8.42.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.11(eslint@8.31.0)(typescript@5.1.6))(eslint-plugin-import@2.27.5)(eslint@8.31.0))(eslint@8.31.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 @@ -5111,29 +10237,21 @@ packages: resolve: 1.22.2 semver: 6.3.0 tsconfig-paths: 3.14.2 + optionalDependencies: + '@typescript-eslint/parser': 5.59.11(eslint@8.31.0)(typescript@5.1.6) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-jsonc@2.9.0(eslint@8.31.0): - resolution: {integrity: sha512-RK+LeONVukbLwT2+t7/OY54NJRccTXh/QbnXzPuTLpFMVZhPuq1C9E07+qWenGx7rrQl0kAalAWl7EmB+RjpGA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '>=6.0.0' + eslint-plugin-jsonc@2.9.0(eslint@8.31.0): dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.31.0) eslint: 8.31.0 jsonc-eslint-parser: 2.3.0 natural-compare: 1.4.0 - dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.31.0): - resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-jsx-a11y@6.7.1(eslint@8.31.0): dependencies: '@babel/runtime': 7.22.5 aria-query: 5.2.1 @@ -5152,25 +10270,15 @@ packages: object.entries: 1.1.6 object.fromentries: 2.0.6 semver: 6.3.0 - dev: true - /eslint-plugin-markdown@3.0.0(eslint@8.31.0): - resolution: {integrity: sha512-hRs5RUJGbeHDLfS7ELanT0e29Ocyssf/7kBM+p7KluY5AwngGkDf8Oyu4658/NZSGTTq05FZeWbkxXtbVyHPwg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-markdown@3.0.0(eslint@8.31.0): dependencies: eslint: 8.31.0 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-mdx@2.1.0(eslint@8.31.0): - resolution: {integrity: sha512-Q8P1JXv+OrD+xhWT95ZyV30MMdnqJ1voKtXfxWrJJ2XihJRI15gPmXbIWY9t8CjA8C//isfzNOmnVY9e3GTL0g==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8.0.0' + eslint-plugin-mdx@2.1.0(eslint@8.31.0): dependencies: eslint: 8.31.0 eslint-mdx: 2.1.0(eslint@8.31.0) @@ -5183,24 +10291,14 @@ packages: vfile: 5.3.7 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-mocha@9.0.0(eslint@8.42.0): - resolution: {integrity: sha512-d7knAcQj1jPCzZf3caeBIn3BnW6ikcvfz0kSqQpwPYcVGLoJV5sz0l0OJB2LR8I7dvTDbqq1oV6ylhSgzA10zg==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.0.0' + eslint-plugin-mocha@9.0.0(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-utils: 3.0.0(eslint@8.42.0) ramda: 0.27.2 - dev: true - /eslint-plugin-n@15.7.0(eslint@8.31.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} - engines: {node: '>=12.22.0'} - peerDependencies: - eslint: '>=7.0.0' + eslint-plugin-n@15.7.0(eslint@8.31.0): dependencies: builtins: 5.0.1 eslint: 8.31.0 @@ -5211,13 +10309,8 @@ packages: minimatch: 3.1.2 resolve: 1.22.2 semver: 7.5.4 - dev: true - /eslint-plugin-n@15.7.0(eslint@8.42.0): - resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} - engines: {node: '>=12.22.0'} - peerDependencies: - eslint: '>=7.0.0' + eslint-plugin-n@15.7.0(eslint@8.42.0): dependencies: builtins: 5.0.1 eslint: 8.42.0 @@ -5228,13 +10321,8 @@ packages: minimatch: 3.1.2 resolve: 1.22.2 semver: 7.5.2 - dev: true - /eslint-plugin-node@11.1.0(eslint@8.42.0): - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' + eslint-plugin-node@11.1.0(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-plugin-es: 3.0.1(eslint@8.42.0) @@ -5243,40 +10331,20 @@ packages: minimatch: 3.1.2 resolve: 1.22.2 semver: 6.3.0 - dev: true - /eslint-plugin-promise@6.1.1(eslint@8.31.0): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint-plugin-promise@6.1.1(eslint@8.31.0): dependencies: eslint: 8.31.0 - dev: true - /eslint-plugin-promise@6.1.1(eslint@8.42.0): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint-plugin-promise@6.1.1(eslint@8.42.0): dependencies: eslint: 8.42.0 - dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.31.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.0(eslint@8.31.0): dependencies: eslint: 8.31.0 - dev: true - /eslint-plugin-react@7.32.2(eslint@8.31.0): - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint-plugin-react@7.32.2(eslint@8.31.0): dependencies: array-includes: 3.1.6 array.prototype.flatmap: 1.3.1 @@ -5294,30 +10362,16 @@ packages: resolve: 2.0.0-next.4 semver: 6.3.0 string.prototype.matchall: 4.0.8 - dev: true - /eslint-plugin-sonarjs@0.19.0(eslint@8.31.0): - resolution: {integrity: sha512-6+s5oNk5TFtVlbRxqZN7FIGmjdPCYQKaTzFPmqieCmsU1kBYDzndTeQav0xtQNwZJWu5awWfTGe8Srq9xFOGnw==} - engines: {node: '>=14'} - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint-plugin-sonarjs@0.19.0(eslint@8.31.0): dependencies: eslint: 8.31.0 - dev: true - /eslint-plugin-typescript@0.14.0: - resolution: {integrity: sha512-2u1WnnDF2mkWWgU1lFQ2RjypUlmRoBEvQN02y9u+IL12mjWlkKFGEBnVsjs9Y8190bfPQCvWly1c2rYYUSOxWw==} - engines: {node: '>=6'} - deprecated: 'Deprecated: Use @typescript-eslint/eslint-plugin instead' + eslint-plugin-typescript@0.14.0: dependencies: requireindex: 1.1.0 - dev: true - /eslint-plugin-unicorn@36.0.0(eslint@8.42.0): - resolution: {integrity: sha512-xxN2vSctGWnDW6aLElm/LKIwcrmk6mdiEcW55Uv5krcrVcIFSWMmEgc/hwpemYfZacKZ5npFERGNz4aThsp1AA==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=7.32.0' + eslint-plugin-unicorn@36.0.0(eslint@8.42.0): dependencies: '@babel/helper-validator-identifier': 7.22.5 ci-info: 3.8.0 @@ -5334,13 +10388,8 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true - - /eslint-plugin-unicorn@46.0.1(eslint@8.31.0): - resolution: {integrity: sha512-setGhMTiLAddg1asdwjZ3hekIN5zLznNa5zll7pBPwFOka6greCKDQydfqy4fqyUhndi74wpDzClSQMEcmOaew==} - engines: {node: '>=14.18'} - peerDependencies: - eslint: '>=8.28.0' + + eslint-plugin-unicorn@46.0.1(eslint@8.31.0): dependencies: '@babel/helper-validator-identifier': 7.22.5 '@eslint-community/eslint-utils': 4.4.0(eslint@8.31.0) @@ -5359,13 +10408,8 @@ packages: safe-regex: 2.1.1 semver: 7.5.4 strip-indent: 3.0.0 - dev: true - /eslint-plugin-yml@1.8.0(eslint@8.31.0): - resolution: {integrity: sha512-fgBiJvXD0P2IN7SARDJ2J7mx8t0bLdG6Zcig4ufOqW5hOvSiFxeUyc2g5I1uIm8AExbo26NNYCcTGZT0MXTsyg==} - engines: {node: ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '>=6.0.0' + eslint-plugin-yml@1.8.0(eslint@8.31.0): dependencies: debug: 4.3.4(supports-color@8.1.1) eslint: 8.31.0 @@ -5374,28 +10418,18 @@ packages: yaml-eslint-parser: 1.2.2 transitivePeerDependencies: - supports-color - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.0: - resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-template-visitor@2.3.2(eslint@8.42.0): - resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==} - peerDependencies: - eslint: '>=7.0.0' + eslint-template-visitor@2.3.2(eslint@8.42.0): dependencies: '@babel/core': 7.20.5 '@babel/eslint-parser': 7.22.5(@babel/core@7.20.5)(eslint@8.42.0) @@ -5405,54 +10439,28 @@ packages: multimap: 1.1.0 transitivePeerDependencies: - supports-color - dev: true - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} + eslint-utils@2.1.0: dependencies: eslint-visitor-keys: 1.3.0 - dev: true - /eslint-utils@3.0.0(eslint@8.31.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' + eslint-utils@3.0.0(eslint@8.31.0): dependencies: eslint: 8.31.0 eslint-visitor-keys: 2.1.0 - dev: true - /eslint-utils@3.0.0(eslint@8.42.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' + eslint-utils@3.0.0(eslint@8.42.0): dependencies: eslint: 8.42.0 eslint-visitor-keys: 2.1.0 - dev: true - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true + eslint-visitor-keys@1.3.0: {} - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true + eslint-visitor-keys@2.1.0: {} - /eslint-visitor-keys@3.4.1: - resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.1: {} - /eslint@8.31.0: - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.31.0: dependencies: '@eslint/eslintrc': 1.4.1 '@humanwhocodes/config-array': 0.11.10 @@ -5495,12 +10503,8 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /eslint@8.42.0: - resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.42.0: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) '@eslint-community/regexpp': 4.5.1 @@ -5543,84 +10547,132 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.5.2: - resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.2 + + espree@9.5.2: dependencies: acorn: 8.9.0 acorn-jsx: 5.3.2(acorn@8.9.0) eslint-visitor-keys: 3.4.1 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.5.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} - dev: true + estree-util-is-identifier-name@2.1.0: {} - /estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} + estree-util-visit@1.2.1: dependencies: '@types/estree-jsx': 1.0.0 '@types/unist': 2.0.6 - dev: true - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: true + etag@1.8.1: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true + eth-ens-namehash@2.0.8: + dependencies: + idna-uts46-hx: 2.3.1 + js-sha3: 0.5.7 - /events@1.1.1: - resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} - engines: {node: '>=0.4.x'} - dev: true + eth-lib@0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.5 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + eth-lib@0.2.8: + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.5 + xhr-request-promise: 0.1.3 - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + ethereum-bloom-filters@1.1.0: + dependencies: + '@noble/hashes': 1.4.0 + + ethereum-cryptography@0.1.3: + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.6 + blakejs: 1.2.1 + 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.4 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.3 + setimmediate: 1.0.5 + + ethereum-cryptography@2.1.3: + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + + ethereumjs-util@7.1.5: + dependencies: + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + event-target-shim@5.0.1: {} + + eventemitter3@4.0.4: {} + + eventemitter3@4.0.7: {} + + events@1.1.1: {} + + events@3.3.0: {} + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -5631,11 +10683,8 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /execa@7.1.1: - resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + execa@7.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -5646,48 +10695,72 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit@0.1.2: {} - /expect@29.5.0: - resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@29.5.0: dependencies: '@jest/expect-utils': 29.5.0 jest-get-type: 29.4.3 jest-matcher-utils: 29.5.0 jest-message-util: 29.5.0 jest-util: 29.5.0 - dev: true - /exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - dev: true + exponential-backoff@3.1.1: {} - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true + express@4.19.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color - /extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: true + ext@1.7.0: + dependencies: + type: 2.7.2 - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + extend@3.0.2: {} + + extendable-error@0.1.7: {} + + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fancy-test@2.0.28: - resolution: {integrity: sha512-UjTjYRlfdUEkvjIMKZlpqALjkgC3GzjUgWDg9KRv/ulxIqppvQUWMt5mOUmqlrSRlGF/Wj7HyFkWKzz5RujpFg==} - engines: {node: '>=12.0.0'} + extsprintf@1.3.0: {} + + fancy-test@2.0.28: dependencies: '@types/chai': 4.0.0 '@types/lodash': 4.14.195 @@ -5699,15 +10772,10 @@ packages: stdout-stderr: 0.1.13 transitivePeerDependencies: - supports-color - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} - engines: {node: '>=8.6.0'} + fast-glob@3.2.12: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -5715,225 +10783,175 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-levenshtein@3.0.0: - resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + fast-levenshtein@3.0.0: dependencies: fastest-levenshtein: 1.0.16 - dev: true - /fastest-levenshtein@1.0.16: - resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} - engines: {node: '>= 4.9.1'} - dev: true + fastest-levenshtein@1.0.16: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - /fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + fault@2.0.1: dependencies: format: 0.2.2 - dev: true - /fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.0.4 - dev: true - /filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filelist@1.0.4: dependencies: minimatch: 5.1.6 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + finalhandler@1.2.0: + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + find-yarn-workspace-root2@1.2.16: dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 - dev: true - /find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} + find-yarn-workspace-root@2.0.0: dependencies: micromatch: 4.0.5 - dev: true - /first-chunk-stream@2.0.0: - resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==} - engines: {node: '>=0.10.0'} + first-chunk-stream@2.0.0: dependencies: readable-stream: 2.3.8 - dev: true - /flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.0.4: dependencies: flatted: 3.2.7 rimraf: 3.0.2 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flatted@3.2.7: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} + foreground-child@3.1.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.0.2 - /format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - dev: true + forever-agent@0.6.1: {} - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + form-data-encoder@1.7.1: {} + + form-data@2.3.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + format@0.2.2: {} + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - dev: true - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@4.0.3: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@1.2.7: + dependencies: + minipass: 2.9.0 + + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - dev: true - /fs-minipass@3.0.2: - resolution: {integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs-minipass@3.0.2: dependencies: minipass: 5.0.0 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true + fsevents@2.3.2: optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true + function-bind@1.1.1: {} - /function.prototype.name@1.1.5: - resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.5: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 functions-have-names: 1.2.3 - dev: true - /functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true + functional-red-black-tree@1.0.1: {} - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gauge@3.0.2: - resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} - engines: {node: '>=10'} + gauge@3.0.2: dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -5944,11 +10962,8 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 - dev: true - /gauge@4.0.4: - resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + gauge@4.0.4: dependencies: aproba: 2.0.0 color-support: 1.1.3 @@ -5958,91 +10973,58 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 - dev: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-func-name@2.0.0: - resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} - dev: true + get-func-name@2.0.0: {} - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.2.1: dependencies: function-bind: 1.1.1 has: 1.0.3 has-proto: 1.0.1 has-symbols: 1.0.3 - dev: true - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + get-package-type@0.1.0: {} - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - dev: true - /get-tsconfig@4.6.0: - resolution: {integrity: sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==} + get-tsconfig@4.6.0: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - dev: true + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 - /github-username@6.0.0: - resolution: {integrity: sha512-7TTrRjxblSI5l6adk9zd+cV5d6i1OrJSo3Vr9xdGqFLBQo0mz5P9eIfKCDJ7eekVGGFLbce0qbPSnktXV2BjDQ==} - engines: {node: '>=10'} + github-slugger@1.5.0: {} + + github-username@6.0.0(encoding@0.1.13): dependencies: - '@octokit/rest': 18.12.0 + '@octokit/rest': 18.12.0(encoding@0.1.13) transitivePeerDependencies: - encoding - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@10.3.1: - resolution: {integrity: sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.1: dependencies: foreground-child: 3.1.1 jackspeak: 2.2.1 @@ -6050,8 +11032,7 @@ packages: minipass: 6.0.2 path-scurry: 1.10.0 - /glob@7.1.7: - resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + glob@7.1.7: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6059,10 +11040,8 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -6070,41 +11049,31 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + glob@8.1.0: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 5.1.6 once: 1.4.0 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 - /globals@13.20.0: - resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} - engines: {node: '>=8'} + globals@11.12.0: {} + + globals@13.20.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.3: dependencies: define-properties: 1.2.0 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -6113,30 +11082,21 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /globby@13.2.0: - resolution: {integrity: sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@13.2.0: dependencies: dir-glob: 3.0.1 fast-glob: 3.2.12 ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 - dev: true - /google-protobuf@3.21.2: - resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} - dev: true + google-protobuf@3.21.2: {} - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.1 - dev: true - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 @@ -6149,115 +11109,100 @@ packages: lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + got@12.1.0: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 5.0.1 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.0 + cacheable-lookup: 6.1.0 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + form-data-encoder: 1.7.1 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 2.0.1 - /grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: true + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + grapheme-splitter@1.0.4: {} - /grouped-queue@2.0.0: - resolution: {integrity: sha512-/PiFUa7WIsl48dUeCvhIHnwNmAAzlI/eHoJl0vu3nsFA366JleY7Ff8EVTplZu5kO0MIdZjKTTnzItL61ahbnw==} - engines: {node: '>=8.0.0'} - dev: true + graphemer@1.4.0: {} - /growl@1.10.5: - resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} - engines: {node: '>=4.x'} - dev: true + grouped-queue@2.0.0: {} + + growl@1.10.5: {} + + har-schema@2.0.0: {} + + har-validator@5.1.5: + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 - /hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true + hard-rejection@2.1.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.0: dependencies: get-intrinsic: 1.2.1 - dev: true - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.1: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 - dev: true - /has-unicode@2.0.1: - resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} - dev: true + has-unicode@2.0.1: {} - /has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} + has@1.0.3: dependencies: function-bind: 1.1.1 - dev: true - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - dev: true + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 - /hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} + he@1.2.0: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + hosted-git-info@2.8.9: {} + + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 - dev: true - /hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hosted-git-info@6.1.1: dependencies: lru-cache: 7.18.3 - dev: true - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.1.1: {} - /http-call@5.3.0: - resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} - engines: {node: '>=8.0.0'} + http-call@5.3.0: dependencies: content-type: 1.0.5 debug: 4.3.4(supports-color@8.1.1) @@ -6267,171 +11212,125 @@ packages: tunnel-agent: 0.6.0 transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-https@1.0.0: {} + + http-proxy-agent@4.0.1: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + http-signature@1.2.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: true - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color - dev: true - /human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: true + human-id@1.0.2: {} - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - dev: true + human-signals@4.3.1: {} - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + humanize-ms@1.2.1: dependencies: ms: 2.1.3 - dev: true - /humps@2.0.1: - resolution: {integrity: sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==} - dev: true + humps@2.0.1: {} - /hyperlinker@1.0.0: - resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} - engines: {node: '>=4'} + hyperlinker@1.0.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - requiresBuild: true + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true optional: true - /ieee754@1.1.13: - resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} - dev: true + idna-uts46-hx@2.3.1: + dependencies: + punycode: 2.1.0 - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.1.13: {} - /ignore-walk@4.0.1: - resolution: {integrity: sha512-rzDQLaW4jQbh2YrOFlJdCtX8qgJTehFRYiUB2r1osqTeDzV/3+Jh8fz1oAPzUThf3iku8Ds4IDqawI5d8mUiQw==} - engines: {node: '>=10'} + ieee754@1.2.1: {} + + ignore-walk@4.0.1: dependencies: minimatch: 3.1.2 - dev: true - /ignore-walk@6.0.3: - resolution: {integrity: sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + ignore-walk@6.0.3: dependencies: minimatch: 9.0.1 - dev: true - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} + ignore@5.2.4: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - hasBin: true + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true - /import-meta-resolve@2.2.2: - resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} - dev: true + import-meta-resolve@2.2.2: {} - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} + indent-string@4.0.0: {} - /infer-owner@1.0.4: - resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} - dev: true + infer-owner@1.0.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + ini@4.1.1: {} - /inquirer@8.2.5: - resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} - engines: {node: '>=12.0.0'} + inquirer@8.2.5: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -6448,365 +11347,207 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 7.0.0 - dev: true - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} + internal-slot@1.0.5: dependencies: get-intrinsic: 1.2.1 has: 1.0.3 side-channel: 1.0.4 - dev: true - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true + interpret@1.4.0: {} - /ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - dev: true + ip@2.0.0: {} - /is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - dev: true + ipaddr.js@1.9.1: {} - /is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - dev: true + is-alphabetical@1.0.4: {} - /is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + is-alphabetical@2.0.1: {} + + is-alphanumerical@1.0.4: dependencies: is-alphabetical: 1.0.4 is-decimal: 1.0.4 - dev: true - /is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - dev: true - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.2: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-typed-array: 1.1.10 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: true + is-buffer@2.0.5: {} - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true + is-ci@3.0.1: dependencies: ci-info: 3.8.0 - dev: true - /is-core-module@2.12.1: - resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + is-core-module@2.12.1: dependencies: has: 1.0.3 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - dev: true + is-decimal@1.0.4: {} - /is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - dev: true + is-decimal@2.0.1: {} - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + is-docker@2.2.1: {} - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true + is-docker@3.0.0: {} - /is-empty@1.2.0: - resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} - dev: true + is-empty@1.2.0: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + is-extglob@2.1.1: {} - /is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: true + is-fullwidth-code-point@2.0.0: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-fullwidth-code-point@3.0.0: {} - /is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true + is-function@1.0.2: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-fn@2.1.0: {} + + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - /is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - dev: true + is-hex-prefixed@1.0.0: {} - /is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - dev: true + is-hexadecimal@1.0.4: {} - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-lambda@1.0.1: - resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} - dev: true + is-lambda@1.0.1: {} - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.2: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-obj@1.1.0: {} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: true + is-plain-obj@2.1.0: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true + is-plain-obj@4.1.0: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: call-bind: 1.0.2 has-tostringtag: 1.0.0 - dev: true - /is-retry-allowed@1.2.0: - resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} - engines: {node: '>=0.10.0'} - dev: true + is-retry-allowed@1.2.0: {} - /is-scoped@2.1.0: - resolution: {integrity: sha512-Cv4OpPTHAK9kHYzkzCrof3VJh7H/PrG2MBUMvvJebaaUMbqhm0YAtXnvh0I3Hnj2tMZWwrRROWLSgfJrKqWmlQ==} - engines: {node: '>=8'} + is-scoped@2.1.0: dependencies: scoped-regex: 2.1.0 - dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.2: dependencies: call-bind: 1.0.2 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + is-stream@3.0.0: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 - dev: true - /is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} + is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.10: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-typedarray@1.0.0: {} - /is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - dev: true + is-unicode-supported@0.1.0: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-utf8@0.2.1: {} + + is-weakref@1.0.2: dependencies: call-bind: 1.0.2 - dev: true - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-windows@1.0.2: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + isbinaryfile@4.0.10: {} - /isbinaryfile@5.0.0: - resolution: {integrity: sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==} - engines: {node: '>= 14.0.0'} - dev: true + isbinaryfile@5.0.0: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@2.0.0: {} - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true + isstream@0.1.2: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-coverage@3.2.0: {} + + istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.20.5 '@babel/parser': 7.22.5 @@ -6815,65 +11556,45 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} + istanbul-lib-report@3.0.0: dependencies: istanbul-lib-coverage: 3.2.0 make-dir: 3.1.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.5: - resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} - engines: {node: '>=8'} + istanbul-reports@3.1.5: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 - dev: true - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} - engines: {node: '>=14'} + jackspeak@2.2.1: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} - engines: {node: '>=10'} - hasBin: true + jake@10.8.7: dependencies: async: 3.2.4 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - /jest-changed-files@29.5.0: - resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-changed-files@29.5.0: dependencies: execa: 5.1.1 p-limit: 3.1.0 - dev: true - /jest-circus@29.5.0: - resolution: {integrity: sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-circus@29.5.0: dependencies: '@jest/environment': 29.5.0 '@jest/expect': 29.5.0 @@ -6897,52 +11618,31 @@ packages: stack-utils: 2.0.6 transitivePeerDependencies: - supports-color - dev: true - /jest-cli@29.5.0: - resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest-cli@29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)): dependencies: - '@jest/core': 29.5.0 + '@jest/core': 29.5.0(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@20.3.3) + jest-config: 29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) jest-util: 29.5.0 - jest-validate: 29.5.0 - prompts: 2.4.2 - yargs: 17.7.2 - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node - dev: true - - /jest-config@29.5.0(@types/node@20.3.3): - resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true + jest-validate: 29.5.0 + prompts: 2.4.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - supports-color + - ts-node + + jest-config@29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)): dependencies: '@babel/core': 7.20.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.3.3 babel-jest: 29.5.0(@babel/core@7.20.5) chalk: 4.1.2 ci-info: 3.8.0 @@ -6962,41 +11662,32 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.3.3 + ts-node: 10.9.1(@types/node@20.3.3)(typescript@5.1.6) transitivePeerDependencies: - supports-color - dev: true - /jest-diff@29.5.0: - resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-diff@29.5.0: dependencies: chalk: 4.1.2 diff-sequences: 29.4.3 jest-get-type: 29.4.3 pretty-format: 29.5.0 - dev: true - /jest-docblock@29.4.3: - resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-docblock@29.4.3: dependencies: detect-newline: 3.1.0 - dev: true - /jest-each@29.5.0: - resolution: {integrity: sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-each@29.5.0: dependencies: '@jest/types': 29.5.0 chalk: 4.1.2 jest-get-type: 29.4.3 jest-util: 29.5.0 pretty-format: 29.5.0 - dev: true - /jest-environment-node@29.5.0: - resolution: {integrity: sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-environment-node@29.5.0: dependencies: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 @@ -7004,16 +11695,10 @@ packages: '@types/node': 20.3.3 jest-mock: 29.5.0 jest-util: 29.5.0 - dev: true - /jest-get-type@29.4.3: - resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-get-type@29.4.3: {} - /jest-haste-map@29.5.0: - resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@29.5.0: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 @@ -7028,29 +11713,20 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 - dev: true - /jest-leak-detector@29.5.0: - resolution: {integrity: sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-leak-detector@29.5.0: dependencies: jest-get-type: 29.4.3 pretty-format: 29.5.0 - dev: true - /jest-matcher-utils@29.5.0: - resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@29.5.0: dependencies: chalk: 4.1.2 jest-diff: 29.5.0 jest-get-type: 29.4.3 pretty-format: 29.5.0 - dev: true - /jest-message-util@29.5.0: - resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@29.5.0: dependencies: '@babel/code-frame': 7.22.5 '@jest/types': 29.5.0 @@ -7061,47 +11737,27 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 stack-utils: 2.0.6 - dev: true - /jest-mock@29.5.0: - resolution: {integrity: sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@29.5.0: dependencies: '@jest/types': 29.5.0 '@types/node': 20.3.3 jest-util: 29.5.0 - dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): - resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: + jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): + optionalDependencies: jest-resolve: 29.5.0 - dev: true - /jest-regex-util@29.4.3: - resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dev: true + jest-regex-util@29.4.3: {} - /jest-resolve-dependencies@29.5.0: - resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve-dependencies@29.5.0: dependencies: jest-regex-util: 29.4.3 jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color - dev: true - /jest-resolve@29.5.0: - resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-resolve@29.5.0: dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -7112,11 +11768,8 @@ packages: resolve: 1.22.2 resolve.exports: 2.0.2 slash: 3.0.0 - dev: true - /jest-runner@29.5.0: - resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runner@29.5.0: dependencies: '@jest/console': 29.5.0 '@jest/environment': 29.5.0 @@ -7141,11 +11794,8 @@ packages: source-map-support: 0.5.13 transitivePeerDependencies: - supports-color - dev: true - /jest-runtime@29.5.0: - resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-runtime@29.5.0: dependencies: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 @@ -7171,11 +11821,8 @@ packages: strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - dev: true - /jest-snapshot@29.5.0: - resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-snapshot@29.5.0: dependencies: '@babel/core': 7.20.5 '@babel/generator': 7.22.5 @@ -7202,11 +11849,8 @@ packages: semver: 7.5.4 transitivePeerDependencies: - supports-color - dev: true - /jest-util@29.5.0: - resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@29.5.0: dependencies: '@jest/types': 29.5.0 '@types/node': 20.3.3 @@ -7214,11 +11858,8 @@ packages: ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - dev: true - /jest-validate@29.5.0: - resolution: {integrity: sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-validate@29.5.0: dependencies: '@jest/types': 29.5.0 camelcase: 6.3.0 @@ -7226,11 +11867,8 @@ packages: jest-get-type: 29.4.3 leven: 3.1.0 pretty-format: 29.5.0 - dev: true - /jest-watcher@29.5.0: - resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-watcher@29.5.0: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 @@ -7240,362 +11878,230 @@ packages: emittery: 0.13.1 jest-util: 29.5.0 string-length: 4.0.2 - dev: true - /jest-worker@29.5.0: - resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@29.5.0: dependencies: '@types/node': 20.3.3 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jest@29.5.0: - resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true + jest@29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)): dependencies: - '@jest/core': 29.5.0 + '@jest/core': 29.5.0(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0 + jest-cli: 29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) transitivePeerDependencies: - '@types/node' - supports-color - ts-node - dev: true - /jmespath@0.16.0: - resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} - engines: {node: '>= 0.6.0'} - dev: true + jmespath@0.16.0: {} - /js-sdsl@4.4.1: - resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} - dev: true + js-sdsl@4.4.1: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-sha3@0.5.7: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-sha3@0.8.0: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + jsbn@0.1.1: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@0.5.0: {} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + jsesc@3.0.2: {} - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-better-errors@1.0.2: {} - /json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-parse-even-better-errors@3.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stringify-nice@1.1.4: - resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==} - dev: true + json-schema@0.4.0: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json-stringify-nice@1.1.4: {} + + json-stringify-safe@5.0.1: {} + + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonc-eslint-parser@2.3.0: - resolution: {integrity: sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + jsonc-eslint-parser@2.3.0: dependencies: acorn: 8.9.0 eslint-visitor-keys: 3.4.1 espree: 9.5.2 semver: 7.5.4 - dev: true - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonc-parser@3.2.1: {} + + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /jsx-ast-utils@3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} - engines: {node: '>=4.0'} + jsprim@1.4.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + jsx-ast-utils@3.3.3: dependencies: array-includes: 3.1.6 object.assign: 4.1.4 - dev: true - /just-diff-apply@5.5.0: - resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==} - dev: true + just-diff-apply@5.5.0: {} - /just-diff@5.2.0: - resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} - dev: true + just-diff@5.2.0: {} - /keyv@4.5.2: - resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + readable-stream: 3.6.2 + + keyv@4.5.2: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + kind-of@6.0.3: {} - /kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true + kleur@3.0.3: {} - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true + kleur@4.1.5: {} - /language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - dev: true + language-subtag-registry@0.3.22: {} - /language-tags@1.0.5: - resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} + language-tags@1.0.5: dependencies: language-subtag-registry: 0.3.22 - dev: true - /leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true + leven@3.1.0: {} - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /lines-and-columns@2.0.3: - resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + lines-and-columns@2.0.3: {} - /load-plugin@5.1.0: - resolution: {integrity: sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==} + load-plugin@5.1.0: dependencies: '@npmcli/config': 6.2.0 import-meta-resolve: 2.2.2 - dev: true - /load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} - engines: {node: '>=6'} + load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash._reinterpolate@3.0.0: - resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} - dev: true + lodash._reinterpolate@3.0.0: {} - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true + lodash.debounce@4.0.8: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: true + lodash.startcase@4.4.0: {} - /lodash.template@4.5.0: - resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} + lodash.template@4.5.0: dependencies: lodash._reinterpolate: 3.0.0 lodash.templatesettings: 4.2.0 - dev: true - /lodash.templatesettings@4.2.0: - resolution: {integrity: sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==} + lodash.templatesettings@4.2.0: dependencies: lodash._reinterpolate: 3.0.0 - dev: true - /lodash.unescape@4.0.1: - resolution: {integrity: sha512-DhhGRshNS1aX6s5YdBE3njCCouPgnG29ebyHvImlZzXZf2SHgt+J08DHgytTPnpywNbO1Y8mNUFyQuIDBq2JZg==} - dev: true + lodash.unescape@4.0.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: false + long@5.2.3: {} - /longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - dev: true + longest-streak@3.1.0: {} - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - dev: true - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true + lowercase-keys@2.0.0: {} - /lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + lowercase-keys@3.0.0: {} + + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true + lru-cache@7.18.3: {} - /lru-cache@9.1.2: - resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} - engines: {node: 14 || >=16.14} + lru-cache@9.1.2: {} - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + lunr@2.3.9: {} + + make-dir@3.1.0: dependencies: semver: 6.3.0 - dev: true - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + make-error@1.3.6: {} - /make-fetch-happen@10.2.1: - resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + make-fetch-happen@10.2.1: dependencies: agentkeepalive: 4.3.0 cacache: 16.1.3 @@ -7616,11 +12122,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /make-fetch-happen@11.1.1: - resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + make-fetch-happen@11.1.1: dependencies: agentkeepalive: 4.3.0 cacache: 17.1.3 @@ -7639,11 +12142,8 @@ packages: ssri: 10.0.4 transitivePeerDependencies: - supports-color - dev: true - /make-fetch-happen@9.1.0: - resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} - engines: {node: '>= 10'} + make-fetch-happen@9.1.0: dependencies: agentkeepalive: 4.3.0 cacache: 15.3.0 @@ -7664,26 +12164,24 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + makeerror@1.0.12: dependencies: tmpl: 1.0.5 - dev: true - /map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true + map-obj@1.0.1: {} - /map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true + map-obj@4.3.0: {} - /mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + marked@4.3.0: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + mdast-util-from-markdown@0.8.5: dependencies: '@types/mdast': 3.0.11 mdast-util-to-string: 2.0.0 @@ -7692,10 +12190,8 @@ packages: unist-util-stringify-position: 2.0.3 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + mdast-util-from-markdown@1.3.1: dependencies: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 @@ -7711,10 +12207,8 @@ packages: uvu: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} + mdast-util-mdx-expression@1.3.2: dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 @@ -7723,10 +12217,8 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdx-jsx@2.1.4: - resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} + mdast-util-mdx-jsx@2.1.4: dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 @@ -7742,10 +12234,8 @@ packages: vfile-message: 3.1.4 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdx@2.0.1: - resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} + mdast-util-mdx@2.0.1: dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 @@ -7754,10 +12244,8 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} + mdast-util-mdxjs-esm@1.3.1: dependencies: '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.4 @@ -7766,17 +12254,13 @@ packages: mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - dev: true - /mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + mdast-util-phrasing@3.0.1: dependencies: '@types/mdast': 3.0.11 unist-util-is: 5.2.1 - dev: true - /mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + mdast-util-to-markdown@1.5.0: dependencies: '@types/mdast': 3.0.11 '@types/unist': 2.0.6 @@ -7786,26 +12270,16 @@ packages: micromark-util-decode-string: 1.1.0 unist-util-visit: 4.1.2 zwitch: 2.0.4 - dev: true - /mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - dev: true + mdast-util-to-string@2.0.0: {} - /mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + mdast-util-to-string@3.2.0: dependencies: '@types/mdast': 3.0.11 - dev: true - /mem-fs-editor@9.7.0(mem-fs@2.3.0): - resolution: {integrity: sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg==} - engines: {node: '>=12.10.0'} - peerDependencies: - mem-fs: ^2.1.0 - peerDependenciesMeta: - mem-fs: - optional: true + media-typer@0.3.0: {} + + mem-fs-editor@9.7.0(mem-fs@2.3.0): dependencies: binaryextensions: 4.18.0 commondir: 1.0.1 @@ -7813,26 +12287,21 @@ packages: ejs: 3.1.9 globby: 11.1.0 isbinaryfile: 5.0.0 - mem-fs: 2.3.0 minimatch: 7.4.6 multimatch: 5.0.0 normalize-path: 3.0.0 textextensions: 5.16.0 - dev: true + optionalDependencies: + mem-fs: 2.3.0 - /mem-fs@2.3.0: - resolution: {integrity: sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw==} - engines: {node: '>=12'} + mem-fs@2.3.0: dependencies: '@types/node': 15.14.9 '@types/vinyl': 2.0.7 vinyl: 2.2.1 vinyl-file: 3.0.0 - dev: true - /meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} - engines: {node: '>=8'} + meow@6.1.1: dependencies: '@types/minimist': 1.2.2 camelcase-keys: 6.2.2 @@ -7845,18 +12314,16 @@ packages: trim-newlines: 3.0.1 type-fest: 0.13.1 yargs-parser: 18.1.3 - dev: true - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-descriptors@1.0.1: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + merge-stream@2.0.0: {} - /micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromark-core-commonmark@1.1.0: dependencies: decode-named-character-reference: 1.0.2 micromark-factory-destination: 1.1.0 @@ -7874,10 +12341,8 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-mdx-expression@1.0.8: - resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} + micromark-extension-mdx-expression@1.0.8: dependencies: '@types/estree': 1.0.1 micromark-factory-mdx-expression: 1.0.9 @@ -7887,10 +12352,8 @@ packages: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-extension-mdx-jsx@1.0.5: - resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} + micromark-extension-mdx-jsx@1.0.5: dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.1 @@ -7902,16 +12365,12 @@ packages: micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-extension-mdx-md@1.0.1: - resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} + micromark-extension-mdx-md@1.0.1: dependencies: micromark-util-types: 1.1.0 - dev: true - /micromark-extension-mdxjs-esm@1.0.5: - resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} + micromark-extension-mdxjs-esm@1.0.5: dependencies: '@types/estree': 1.0.1 micromark-core-commonmark: 1.1.0 @@ -7922,10 +12381,8 @@ packages: unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-extension-mdxjs@1.0.1: - resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} + micromark-extension-mdxjs@1.0.1: dependencies: acorn: 8.9.0 acorn-jsx: 5.3.2(acorn@8.9.0) @@ -7935,27 +12392,21 @@ packages: micromark-extension-mdxjs-esm: 1.0.5 micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + micromark-factory-destination@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + micromark-factory-label@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-factory-mdx-expression@1.0.9: - resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} + micromark-factory-mdx-expression@1.0.9: dependencies: '@types/estree': 1.0.1 micromark-util-character: 1.2.0 @@ -7965,82 +12416,60 @@ packages: unist-util-position-from-estree: 1.1.2 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + micromark-factory-space@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + micromark-factory-title@1.1.0: dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + micromark-factory-whitespace@1.1.0: dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + micromark-util-character@1.2.0: dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + micromark-util-chunked@1.1.0: dependencies: micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + micromark-util-classify-character@1.1.0: dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + micromark-util-combine-extensions@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 - dev: true - /micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + micromark-util-decode-numeric-character-reference@1.1.0: dependencies: micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + micromark-util-decode-string@1.1.0: dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - dev: true + micromark-util-encode@1.1.0: {} - /micromark-util-events-to-acorn@1.2.3: - resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} + micromark-util-events-to-acorn@1.2.3: dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.1 @@ -8050,60 +12479,42 @@ packages: micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 - dev: true - /micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - dev: true + micromark-util-html-tag-name@1.2.0: {} - /micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + micromark-util-normalize-identifier@1.1.0: dependencies: micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + micromark-util-resolve-all@1.1.0: dependencies: micromark-util-types: 1.1.0 - dev: true - /micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + micromark-util-sanitize-uri@1.2.0: dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 - dev: true - /micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + micromark-util-subtokenize@1.1.0: dependencies: micromark-util-chunked: 1.1.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - dev: true - /micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - dev: true + micromark-util-symbol@1.1.0: {} - /micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - dev: true + micromark-util-types@1.1.0: {} - /micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + micromark@2.11.4: dependencies: debug: 4.3.4(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color - dev: true - /micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + micromark@3.2.0: dependencies: '@types/debug': 4.1.8 debug: 4.3.4(supports-color@8.1.1) @@ -8124,199 +12535,156 @@ packages: uvu: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-response@1.0.1: {} - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-response@3.1.0: {} - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + min-indent@1.0.1: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + minimalistic-assert@1.0.1: {} - /minimatch@3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.0.4: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} + minimatch@7.4.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.1: - resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.1: dependencies: brace-expansion: 2.0.1 - /minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist-options@4.1.0: dependencies: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} + minipass-collect@1.0.2: dependencies: minipass: 3.3.6 - dev: true - /minipass-fetch@1.4.1: - resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} - engines: {node: '>=8'} + minipass-fetch@1.4.1: dependencies: minipass: 3.3.6 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 - dev: true - /minipass-fetch@2.1.2: - resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + minipass-fetch@2.1.2: dependencies: minipass: 3.3.6 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 - dev: true - /minipass-fetch@3.0.3: - resolution: {integrity: sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + minipass-fetch@3.0.3: dependencies: minipass: 5.0.0 minipass-sized: 1.0.3 minizlib: 2.1.2 optionalDependencies: encoding: 0.1.13 - dev: true - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} + minipass-flush@1.0.5: dependencies: minipass: 3.3.6 - dev: true - /minipass-json-stream@1.0.1: - resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==} + minipass-json-stream@1.0.1: dependencies: jsonparse: 1.3.1 minipass: 3.3.6 - dev: true - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 - dev: true - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} + minipass-sized@1.0.3: dependencies: minipass: 3.3.6 - dev: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@2.9.0: + dependencies: + safe-buffer: 5.2.1 + yallist: 3.1.1 + + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: true - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@5.0.0: {} - /minipass@6.0.2: - resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} - engines: {node: '>=16 || 14 >=14.17'} + minipass@6.0.2: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@1.3.3: + dependencies: + minipass: 2.9.0 + + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true - /mixme@0.5.9: - resolution: {integrity: sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==} - engines: {node: '>= 8.0.0'} - dev: true + mixme@0.5.9: {} - /mkdirp-infer-owner@2.0.0: - resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} - engines: {node: '>=10'} + mkdirp-infer-owner@2.0.0: dependencies: chownr: 2.0.0 infer-owner: 1.0.4 mkdirp: 1.0.4 - dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp-promise@5.0.1: + dependencies: + mkdirp: 1.0.4 - /mocha@9.0.0: - resolution: {integrity: sha512-GRGG/q9bIaUkHJB9NL+KZNjDhMBHB30zW3bZW9qOiYr+QChyLjPzswaxFWkI1q6lGlSL28EQYzAi2vKWNkPx+g==} - engines: {node: '>= 12.0.0'} - hasBin: true + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + mocha@9.0.0: dependencies: '@ungap/promise-all-settled': 1.1.2 ansi-colors: 4.1.1 @@ -8343,75 +12711,75 @@ packages: yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - dev: true - /mock-stdin@1.0.0: - resolution: {integrity: sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==} - dev: true + mock-fs@4.14.0: {} - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: true + mock-stdin@1.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + mri@1.2.0: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.0.0: {} - /multimap@1.1.0: - resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} - dev: true + ms@2.1.2: {} - /multimatch@5.0.0: - resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} - engines: {node: '>=10'} + ms@2.1.3: {} + + multibase@0.6.1: + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + + multibase@0.7.0: + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + + multicodec@0.5.7: + dependencies: + varint: 5.0.2 + + multicodec@1.0.4: + dependencies: + buffer: 5.7.1 + varint: 5.0.2 + + multihashes@0.4.21: + dependencies: + buffer: 5.7.1 + multibase: 0.7.0 + varint: 5.0.2 + + multimap@1.1.0: {} + + multimatch@5.0.0: dependencies: '@types/minimatch': 3.0.5 array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 minimatch: 3.1.2 - dev: true - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + mute-stream@0.0.8: {} - /mvdan-sh@0.10.1: - resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} - dev: true + mvdan-sh@0.10.1: {} - /nanoid@3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nano-json-stream-parser@0.1.2: {} - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true + nanoid@3.1.23: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare-lite@1.4.0: {} - /natural-orderby@2.0.3: - resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==} + natural-compare@1.4.0: {} - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true + natural-orderby@2.0.3: {} - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + negotiator@0.6.3: {} - /nock@13.3.1: - resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} - engines: {node: '>= 10.13'} + next-tick@1.1.0: {} + + nice-try@1.0.5: {} + + nock@13.3.1: dependencies: debug: 4.3.4(supports-color@8.1.1) json-stringify-safe: 5.0.1 @@ -8419,24 +12787,24 @@ packages: propagate: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /node-fetch@2.6.11: - resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-addon-api@2.0.2: {} + + node-fetch@2.6.11(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 - dev: true + optionalDependencies: + encoding: 0.1.13 - /node-gyp@8.4.1: - resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} - engines: {node: '>= 10.12.0'} - hasBin: true + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-gyp-build@4.8.0: {} + + node-gyp@8.4.1: dependencies: env-paths: 2.2.1 glob: 7.2.3 @@ -8451,12 +12819,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /node-gyp@9.4.0: - resolution: {integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==} - engines: {node: ^12.13 || ^14.13 || >=16} - hasBin: true + node-gyp@9.4.0: dependencies: env-paths: 2.2.1 exponential-backoff: 3.1.1 @@ -8471,179 +12835,109 @@ packages: which: 2.0.2 transitivePeerDependencies: - supports-color - dev: true - /node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - dev: true + node-int64@0.4.0: {} - /node-releases@2.0.12: - resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} - dev: true + node-releases@2.0.12: {} - /nopt@5.0.0: - resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} - engines: {node: '>=6'} - hasBin: true + nopt@5.0.0: dependencies: abbrev: 1.1.1 - dev: true - /nopt@6.0.0: - resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - hasBin: true + nopt@6.0.0: dependencies: abbrev: 1.1.1 - dev: true - /nopt@7.2.0: - resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + nopt@7.2.0: dependencies: abbrev: 2.0.0 - dev: true - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.2 semver: 5.7.1 validate-npm-package-license: 3.0.4 - dev: true - /normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} + normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.12.1 semver: 7.5.4 validate-npm-package-license: 3.0.4 - dev: true - /normalize-package-data@5.0.0: - resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + normalize-package-data@5.0.0: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.12.1 semver: 7.5.4 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: true + normalize-url@6.1.0: {} - /npm-bundled@1.1.2: - resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} + npm-bundled@1.1.2: dependencies: npm-normalize-package-bin: 1.0.1 - dev: true - /npm-bundled@3.0.0: - resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-bundled@3.0.0: dependencies: npm-normalize-package-bin: 3.0.1 - dev: true - /npm-install-checks@4.0.0: - resolution: {integrity: sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==} - engines: {node: '>=10'} + npm-install-checks@4.0.0: dependencies: semver: 7.5.4 - dev: true - /npm-install-checks@6.1.1: - resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-install-checks@6.1.1: dependencies: semver: 7.5.4 - dev: true - /npm-normalize-package-bin@1.0.1: - resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==} - dev: true + npm-normalize-package-bin@1.0.1: {} - /npm-normalize-package-bin@2.0.0: - resolution: {integrity: sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true + npm-normalize-package-bin@2.0.0: {} - /npm-normalize-package-bin@3.0.1: - resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + npm-normalize-package-bin@3.0.1: {} - /npm-package-arg@10.1.0: - resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-package-arg@10.1.0: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 semver: 7.5.4 validate-npm-package-name: 5.0.0 - dev: true - /npm-package-arg@8.1.5: - resolution: {integrity: sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==} - engines: {node: '>=10'} + npm-package-arg@8.1.5: dependencies: hosted-git-info: 4.1.0 semver: 7.5.4 validate-npm-package-name: 3.0.0 - dev: true - /npm-packlist@3.0.0: - resolution: {integrity: sha512-L/cbzmutAwII5glUcf2DBRNY/d0TFd4e/FnaZigJV6JD85RHZXJFGwCndjMWiiViiWSsWt3tiOLpI3ByTnIdFQ==} - engines: {node: '>=10'} - hasBin: true + npm-packlist@3.0.0: dependencies: glob: 7.2.3 ignore-walk: 4.0.1 npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 - dev: true - /npm-packlist@7.0.4: - resolution: {integrity: sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-packlist@7.0.4: dependencies: ignore-walk: 6.0.3 - dev: true - /npm-pick-manifest@6.1.1: - resolution: {integrity: sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==} + npm-pick-manifest@6.1.1: dependencies: npm-install-checks: 4.0.0 npm-normalize-package-bin: 1.0.1 npm-package-arg: 8.1.5 semver: 7.5.4 - dev: true - /npm-pick-manifest@8.0.1: - resolution: {integrity: sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-pick-manifest@8.0.1: dependencies: npm-install-checks: 6.1.1 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 semver: 7.5.4 - dev: true - /npm-registry-fetch@12.0.2: - resolution: {integrity: sha512-Df5QT3RaJnXYuOwtXBXS9BWs+tHH2olvkCLh6jcR/b/u3DvPMlp3J0TvvYwplPKxHMOwfg287PYih9QqaVFoKA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} + npm-registry-fetch@12.0.2: dependencies: make-fetch-happen: 10.2.1 minipass: 3.3.6 @@ -8654,11 +12948,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /npm-registry-fetch@14.0.5: - resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + npm-registry-fetch@14.0.5: dependencies: make-fetch-happen: 11.1.1 minipass: 5.0.0 @@ -8669,107 +12960,79 @@ packages: proc-log: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@5.1.0: dependencies: path-key: 4.0.0 - dev: true - /npmlog@5.0.1: - resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 - dev: true - /npmlog@6.0.2: - resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + npmlog@6.0.2: dependencies: are-we-there-yet: 3.0.1 console-control-strings: 1.1.0 gauge: 4.0.4 set-blocking: 2.0.0 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - dev: true + oauth-sign@0.9.0: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-assign@4.1.1: {} - /object-treeify@1.1.33: - resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} - engines: {node: '>= 10'} + object-inspect@1.12.3: {} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + object-keys@1.1.1: {} + + object-treeify@1.1.33: {} + + object.assign@4.1.4: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} + object.entries@1.1.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /object.fromentries@2.0.6: - resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /object.hasown@1.1.2: - resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} + object.hasown@1.1.2: dependencies: define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /object.values@1.1.6: - resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} - engines: {node: '>= 0.4'} + object.values@1.1.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /oclif@3.16.0(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-qbPJ9SifBDPeMnuYIyJc0+kGyXmLubJs/lOD1wjrvAiKqTWQ1xy/EFlNMgBGETCf7RQf1iSJmvf+s22ZkLc7Ow==} - engines: {node: '>=12.0.0'} - hasBin: true + oboe@2.1.5: + dependencies: + http-https: 1.0.0 + + oclif@3.16.0(@types/node@20.3.3)(encoding@0.1.13)(mem-fs@2.3.0)(typescript@5.1.6): dependencies: '@oclif/core': 2.15.0(@types/node@20.3.3)(typescript@5.1.6) '@oclif/plugin-help': 5.2.19(@types/node@20.3.3)(typescript@5.1.6) @@ -8789,7 +13052,7 @@ packages: shelljs: 0.8.5 tslib: 2.6.0 yeoman-environment: 3.19.3 - yeoman-generator: 5.9.0(yeoman-environment@3.19.3) + yeoman-generator: 5.9.0(encoding@0.1.13)(mem-fs@2.3.0)(yeoman-environment@3.19.3) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -8799,41 +13062,31 @@ packages: - mem-fs - supports-color - typescript - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} + onetime@6.0.0: dependencies: mimic-fn: 4.0.0 - dev: true - /open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} + open@9.1.0: dependencies: default-browser: 4.0.0 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 2.2.0 - dev: true - /optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} + optionator@0.9.1: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -8841,11 +13094,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.3 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -8856,108 +13106,62 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: true + outdent@0.5.0: {} - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - dev: true + p-cancelable@2.1.1: {} - /p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} + p-cancelable@3.0.0: {} + + p-filter@2.1.0: dependencies: p-map: 2.1.0 - dev: true - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - dev: true + p-finally@1.0.0: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true + p-map@2.1.0: {} - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 p-timeout: 3.2.0 - dev: true - /p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} + p-timeout@3.2.0: dependencies: p-finally: 1.0.0 - dev: true - /p-transform@1.3.0: - resolution: {integrity: sha512-UJKdSzgd3KOnXXAtqN5+/eeHcvTn1hBkesEmElVgvO/NAYcxAvmjzIGmnNd3Tb/gRAvMBdNRFD4qAWdHxY6QXg==} - engines: {node: '>=12.10.0'} + p-transform@1.3.0: dependencies: debug: 4.3.4(supports-color@8.1.1) p-queue: 6.6.2 transitivePeerDependencies: - supports-color - dev: true - - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true - /pacote@12.0.3: - resolution: {integrity: sha512-CdYEl03JDrRO3x18uHjBYA9TyoW8gy+ThVcypcDkxPtKlw76e4ejhYB6i9lJ+/cebbjpqPW/CijjqxwDTts8Ow==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} - hasBin: true + p-try@2.2.0: {} + + pacote@12.0.3: dependencies: '@npmcli/git': 2.1.0 '@npmcli/installed-package-contents': 1.0.7 @@ -8981,12 +13185,8 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /pacote@15.2.0: - resolution: {integrity: sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + pacote@15.2.0: dependencies: '@npmcli/git': 4.1.0 '@npmcli/installed-package-contents': 2.0.2 @@ -9009,26 +13209,18 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-conflict-json@2.0.2: - resolution: {integrity: sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + parse-conflict-json@2.0.2: dependencies: json-parse-even-better-errors: 2.3.1 just-diff: 5.2.0 just-diff-apply: 5.5.0 - dev: true - /parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + parse-entities@2.0.0: dependencies: character-entities: 1.2.4 character-entities-legacy: 1.1.4 @@ -9036,10 +13228,8 @@ packages: is-alphanumerical: 1.0.4 is-decimal: 1.0.4 is-hexadecimal: 1.0.4 - dev: true - /parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} + parse-entities@4.0.1: dependencies: '@types/unist': 2.0.6 character-entities: 2.0.2 @@ -9049,362 +13239,247 @@ packages: is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - dev: true - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-headers@2.0.5: {} + + parse-json@4.0.0: dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-json@6.0.2: - resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + parse-json@6.0.2: dependencies: '@babel/code-frame': 7.22.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 2.0.3 - dev: true - /password-prompt@1.1.2: - resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} + parseurl@1.3.3: {} + + password-prompt@1.1.2: dependencies: ansi-escapes: 3.2.0 cross-spawn: 6.0.5 - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} + path-key@2.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + path-key@3.1.1: {} - /path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - dev: true + path-key@4.0.0: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.10.0: - resolution: {integrity: sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.10.0: dependencies: lru-cache: 9.1.2 minipass: 6.0.2 - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + path-to-regexp@0.1.7: {} - /pathval@1.1.1: - resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - dev: true + path-type@4.0.0: {} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true + pathval@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + performance-now@2.1.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + picocolors@1.0.0: {} - /pirates@4.0.5: - resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} - engines: {node: '>= 6'} - dev: true + picomatch@2.3.1: {} - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pify@2.3.0: {} + + pify@4.0.1: {} + + pirates@4.0.5: {} + + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + pluralize@8.0.0: {} - /preferred-pm@3.0.3: - resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} - engines: {node: '>=10'} + preferred-pm@3.0.3: dependencies: find-up: 5.0.0 find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-plugin-pkg@0.17.1(prettier@2.8.2): - resolution: {integrity: sha512-XPRRMQR5oseJXdfK8kQDj2LCV1UjmTuDlPbbJ8C2WLaATNhdvZLhQO0+NtWnRrQTP+erLR5cVxfcwyqF+3R8SA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - prettier: ^2.0.0 + prettier-plugin-pkg@0.17.1(prettier@2.8.2): dependencies: prettier: 2.8.2 - dev: true - /prettier-plugin-sh@0.12.8(prettier@2.8.2): - resolution: {integrity: sha512-VOq8h2Gn5UzrCIKm4p/nAScXJbN09HdyFDknAcxt6Qu/tv/juu9bahxSrcnM9XWYA+Spz1F1ANJ4LhfwB7+Q1Q==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - prettier: ^2.0.0 + prettier-plugin-sh@0.12.8(prettier@2.8.2): dependencies: mvdan-sh: 0.10.1 prettier: 2.8.2 sh-syntax: 0.3.7 synckit: 0.8.5 - dev: true - /prettier@2.8.2: - resolution: {integrity: sha512-BtRV9BcncDyI2tsuS19zzhzoxD8Dh8LiCx7j7tHzrkz8GFXAexeWFdi22mjE1d16dftH2qNaytVxqiRTGlMfpw==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prettier@2.8.2: {} - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true + pretty-bytes@5.6.0: {} - /pretty-format@29.5.0: - resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@29.5.0: dependencies: '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 react-is: 18.2.0 - dev: true - /proc-log@1.0.0: - resolution: {integrity: sha512-aCk8AO51s+4JyuYGg3Q/a6gnrlDO09NpVWePtjp7xwphcoQ04x5WAfCyugcsbLooWcMJ87CLkD4+604IckEdhg==} - dev: true + proc-log@1.0.0: {} - /proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + proc-log@3.0.0: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + process-nextick-args@2.0.1: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true + process@0.11.10: {} - /promise-all-reject-late@1.0.1: - resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==} - dev: true + promise-all-reject-late@1.0.1: {} - /promise-call-limit@1.0.2: - resolution: {integrity: sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==} - dev: true + promise-call-limit@1.0.2: {} - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true + promise-inflight@1.0.1: {} - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} + promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - dev: true - /prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} + prompts@2.4.2: dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - dev: true - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - /propagate@2.0.1: - resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} - engines: {node: '>= 8'} - dev: true + propagate@2.0.1: {} - /pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pseudomap@1.0.2: {} + + psl@1.9.0: {} + + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /punycode@1.3.2: - resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - dev: true + punycode@1.3.2: {} - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true + punycode@2.1.0: {} - /pure-rand@6.0.2: - resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} - dev: true + punycode@2.3.0: {} - /querystring@0.2.0: - resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} - engines: {node: '>=0.4.x'} - deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. - dev: true + pure-rand@6.0.2: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + qs@6.11.0: + dependencies: + side-channel: 1.0.4 - /quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true + qs@6.5.3: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + query-string@5.1.1: + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 - /ramda@0.27.2: - resolution: {integrity: sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==} - dev: true + querystring@0.2.0: {} - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + queue-microtask@1.2.3: {} + + quick-lru@4.0.1: {} + + quick-lru@5.1.1: {} + + ramda@0.27.2: {} + + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true + range-parser@1.2.1: {} - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 - /read-cmd-shim@3.0.1: - resolution: {integrity: sha512-kEmDUoYf/CDy8yZbLTmhB1X9kkjf9Q80PCNsDMb7ufrGd6zZSQA1+UyjrO+pZm5K/S4OXCWJeiIt1JA8kAsa6g==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - dev: true + react-is@16.13.1: {} - /read-package-json-fast@2.0.3: - resolution: {integrity: sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==} - engines: {node: '>=10'} + react-is@18.2.0: {} + + read-cmd-shim@3.0.1: {} + + read-package-json-fast@2.0.3: dependencies: json-parse-even-better-errors: 2.3.1 npm-normalize-package-bin: 1.0.1 - dev: true - /read-package-json-fast@3.0.2: - resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + read-package-json-fast@3.0.2: dependencies: json-parse-even-better-errors: 3.0.0 npm-normalize-package-bin: 3.0.1 - dev: true - /read-package-json@6.0.4: - resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + read-package-json@6.0.4: dependencies: glob: 10.3.1 json-parse-even-better-errors: 3.0.0 normalize-package-data: 5.0.0 npm-normalize-package-bin: 3.0.1 - dev: true - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.1 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -9413,107 +13488,67 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readable-stream@4.4.1: - resolution: {integrity: sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@4.4.1: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 events: 3.3.0 process: 0.11.10 - dev: true - /readdir-scoped-modules@1.1.0: - resolution: {integrity: sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==} - deprecated: This functionality has been moved to @npmcli/fs + readdir-scoped-modules@1.1.0: dependencies: debuglog: 1.0.1 dezalgo: 1.0.4 graceful-fs: 4.2.11 once: 1.4.0 - dev: true - /readdirp@3.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} - engines: {node: '>=8.10.0'} + readdirp@3.5.0: dependencies: picomatch: 2.3.1 - dev: true - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} + rechoir@0.6.2: dependencies: resolve: 1.22.2 - dev: true - /redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} + redent@3.0.0: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: true - /redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} + redeyed@2.1.1: dependencies: esprima: 4.0.1 - /regenerate-unicode-properties@10.1.0: - resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.1.0: dependencies: regenerate: 1.4.2 - dev: true - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + regenerate@1.4.2: {} - /regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - dev: true + regenerator-runtime@0.13.11: {} - /regenerator-transform@0.15.1: - resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + regenerator-transform@0.15.1: dependencies: '@babel/runtime': 7.22.5 - dev: true - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true + regexp-tree@0.1.27: {} - /regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.0: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 functions-have-names: 1.2.3 - dev: true - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + regexpp@3.2.0: {} - /regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} - engines: {node: '>=4'} + regexpu-core@5.3.2: dependencies: '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 @@ -9521,330 +13556,282 @@ packages: regjsparser: 0.9.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 - dev: true - /regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} - hasBin: true + regjsparser@0.9.1: dependencies: jsesc: 0.5.0 - dev: true - /remark-mdx@2.3.0: - resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} + remark-mdx@2.3.0: dependencies: mdast-util-mdx: 2.0.1 micromark-extension-mdxjs: 1.0.1 transitivePeerDependencies: - supports-color - dev: true - /remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + remark-parse@10.0.2: dependencies: '@types/mdast': 3.0.11 mdast-util-from-markdown: 1.3.1 unified: 10.1.2 transitivePeerDependencies: - supports-color - dev: true - /remark-stringify@10.0.3: - resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + remark-stringify@10.0.3: dependencies: '@types/mdast': 3.0.11 mdast-util-to-markdown: 1.5.0 unified: 10.1.2 - dev: true - /remove-trailing-separator@1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true + remove-trailing-separator@1.1.0: {} - /replace-ext@1.0.1: - resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} - engines: {node: '>= 0.10'} - dev: true + replace-ext@1.0.1: {} - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true + request@2.88.2: + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true + require-directory@2.1.1: {} - /requireindex@1.1.0: - resolution: {integrity: sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==} - engines: {node: '>=0.10.5'} - dev: true + require-main-filename@2.0.0: {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true + requireindex@1.1.0: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-alpn@1.2.1: {} + + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve.exports@2.0.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - dev: true + resolve.exports@2.0.2: {} - /resolve@1.22.2: - resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} - hasBin: true + resolve@1.22.2: dependencies: is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@2.0.0-next.4: - resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} - hasBin: true + resolve@2.0.0-next.4: dependencies: is-core-module: 2.12.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + retry@0.12.0: {} - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true + retry@0.13.1: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rlp@2.2.7: + dependencies: + bn.js: 5.2.1 + + run-applescript@5.0.0: dependencies: execa: 5.1.1 - dev: true - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + run-async@2.4.1: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.6.0 - dev: true - /sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} + sade@1.8.1: dependencies: mri: 1.2.0 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.0: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 is-regex: 1.1.4 - dev: true - /safe-regex@2.1.1: - resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + safe-regex@2.1.1: dependencies: regexp-tree: 0.1.27 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sax@1.2.1: - resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} - dev: true + sax@1.2.1: {} - /scoped-regex@2.1.0: - resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} - engines: {node: '>=8'} - dev: true + scoped-regex@2.1.0: {} - /semver@5.5.0: - resolution: {integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==} - hasBin: true - dev: true + scrypt-js@3.0.1: {} - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true + secp256k1@4.0.3: + dependencies: + elliptic: 6.5.5 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: true + semver@5.5.0: {} - /semver@7.5.2: - resolution: {integrity: sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==} - engines: {node: '>=10'} - hasBin: true + semver@5.7.1: {} + + semver@6.3.0: {} + + semver@7.5.2: + dependencies: + lru-cache: 6.0.0 + + semver@7.5.3: + dependencies: + lru-cache: 6.0.0 + + semver@7.5.4: dependencies: lru-cache: 6.0.0 - /semver@7.5.3: - resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==} - engines: {node: '>=10'} - hasBin: true + send@0.18.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@5.0.1: dependencies: - lru-cache: 6.0.0 - dev: true + randombytes: 2.1.0 - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + serve-static@1.15.0: dependencies: - lru-cache: 6.0.0 - dev: true + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color - /serialize-javascript@5.0.1: - resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} + servify@0.1.12: dependencies: - randombytes: 2.1.0 - dev: true + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.19.2 + request: 2.88.2 + xhr: 2.6.0 + transitivePeerDependencies: + - supports-color - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true + set-blocking@2.0.0: {} - /sh-syntax@0.3.7: - resolution: {integrity: sha512-xIB/uRniZ9urxAuXp1Ouh/BKSI1VK8RSqfwGj7cV57HvGrFo3vHdJfv8Tdp/cVcxJgXQTkmHr5mG5rqJW8r4wQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + sh-syntax@0.3.7: dependencies: tslib: 2.6.0 - dev: true - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true + shelljs@0.8.5: dependencies: glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 - dev: true - /shx@0.3.3: - resolution: {integrity: sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==} - engines: {node: '>=6'} - hasBin: true + shiki@0.14.7: + dependencies: + ansi-sequence-parser: 1.1.1 + jsonc-parser: 3.2.1 + vscode-oniguruma: 1.7.0 + vscode-textmate: 8.0.0 + + shx@0.3.3: dependencies: minimist: 1.2.8 shelljs: 0.8.5 - dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.4: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.0.2: - resolution: {integrity: sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==} - engines: {node: '>=14'} + signal-exit@4.0.2: {} - /sigstore@1.6.0: - resolution: {integrity: sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + sigstore@1.6.0: dependencies: '@sigstore/protobuf-specs': 0.1.0 '@sigstore/tuf': 1.0.0 @@ -9852,39 +13839,30 @@ packages: tuf-js: 1.1.7 transitivePeerDependencies: - supports-color - dev: true - /sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true + simple-concat@1.0.1: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + simple-get@2.8.2: + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + sisteransi@1.0.5: {} - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slash@3.0.0: {} + + slash@4.0.0: {} + + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + smart-buffer@4.2.0: {} - /smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} - engines: {node: '>=6'} - hasBin: true + smartwrap@2.0.2: dependencies: array.prototype.flat: 1.3.1 breakword: 1.0.6 @@ -9892,171 +13870,128 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 15.4.1 - dev: true - /socks-proxy-agent@6.2.1: - resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} - engines: {node: '>= 10'} + socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color - dev: true - /socks-proxy-agent@7.0.0: - resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} - engines: {node: '>= 10'} + socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color - dev: true - /socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + socks@2.7.1: dependencies: ip: 2.0.0 smart-buffer: 4.2.0 - dev: true - /sort-keys@4.2.0: - resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} - engines: {node: '>=8'} + sort-keys@4.2.0: dependencies: is-plain-obj: 2.1.0 - dev: true - /source-map-support@0.5.13: - resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /spawn-command@0.0.2-1: - resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} - dev: true + spawn-command@0.0.2-1: {} - /spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@2.0.0: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: true - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.13 - dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.3.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.3.0 spdx-license-ids: 3.0.13 - dev: true - /spdx-license-ids@3.0.13: - resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} - dev: true + spdx-license-ids@3.0.13: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.0.3: {} - /ssri@10.0.4: - resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + ssri@10.0.4: dependencies: minipass: 5.0.0 - dev: true - /ssri@8.0.1: - resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} - engines: {node: '>= 8'} + ssri@8.0.1: dependencies: minipass: 3.3.6 - dev: true - /ssri@9.0.1: - resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ssri@9.0.1: dependencies: minipass: 3.3.6 - dev: true - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /stdout-stderr@0.1.13: - resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} - engines: {node: '>=8.0.0'} + statuses@2.0.1: {} + + stdout-stderr@0.1.13: dependencies: debug: 4.3.4(supports-color@8.1.1) strip-ansi: 6.0.1 transitivePeerDependencies: - supports-color - dev: true - /stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + stream-transform@2.1.3: dependencies: mixme: 0.5.9 - dev: true - /string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} + strict-uri-encode@1.1.0: {} + + string-length@4.0.2: dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - dev: true - /string-width@2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} + string-width@2.1.1: dependencies: is-fullwidth-code-point: 2.0.0 strip-ansi: 4.0.0 - dev: true - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - /string.prototype.matchall@4.0.8: - resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + string.prototype.matchall@4.0.8: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 @@ -10066,177 +14001,138 @@ packages: internal-slot: 1.0.5 regexp.prototype.flags: 1.5.0 side-channel: 1.0.4 - dev: true - /string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.7: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + string.prototype.trimend@1.0.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /string.prototype.trimstart@1.0.6: - resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + string.prototype.trimstart@1.0.6: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 es-abstract: 1.21.2 - dev: true - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + stringify-entities@4.0.3: dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - dev: true - /strip-ansi@4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} + strip-ansi@4.0.0: dependencies: ansi-regex: 3.0.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - /strip-bom-buf@1.0.0: - resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==} - engines: {node: '>=4'} + strip-bom-buf@1.0.0: dependencies: is-utf8: 0.2.1 - dev: true - /strip-bom-stream@2.0.0: - resolution: {integrity: sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==} - engines: {node: '>=0.10.0'} + strip-bom-stream@2.0.0: dependencies: first-chunk-stream: 2.0.0 strip-bom: 2.0.0 - dev: true - /strip-bom@2.0.0: - resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} - engines: {node: '>=0.10.0'} + strip-bom@2.0.0: dependencies: is-utf8: 0.2.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true + strip-bom@4.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - dev: true + strip-final-newline@3.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - /supports-color@9.3.1: - resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==} - engines: {node: '>=12'} - dev: true + supports-color@9.3.1: {} - /supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} + supports-hyperlinks@2.3.0: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} + swarm-js@0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10) + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + synckit@0.8.5: dependencies: '@pkgr/utils': 2.4.1 tslib: 2.6.0 - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /tar@6.1.15: - resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} - engines: {node: '>=10'} + tar@4.4.19: + dependencies: + chownr: 1.1.4 + fs-minipass: 1.2.7 + minipass: 2.9.0 + minizlib: 1.3.3 + mkdirp: 0.5.6 + safe-buffer: 5.2.1 + yallist: 3.1.1 + + tar@6.1.15: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -10244,104 +14140,60 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true - /term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - dev: true + term-size@2.2.1: {} - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /textextensions@5.16.0: - resolution: {integrity: sha512-7D/r3s6uPZyU//MCYrX6I14nzauDwJ5CxazouuRGNuvSCihW87ufN6VLoROLCrHg6FblLuJrT6N2BVaPVzqElw==} - engines: {node: '>=0.8'} - dev: true + textextensions@5.16.0: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - dev: true + timed-out@4.0.1: {} - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + titleize@3.0.0: {} + + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - dev: true + tmpl@1.0.5: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - /to-vfile@7.2.4: - resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} + to-vfile@7.2.4: dependencies: is-buffer: 2.0.5 vfile: 5.3.7 - dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + toidentifier@1.0.1: {} - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tough-cookie@2.5.0: + dependencies: + psl: 1.9.0 + punycode: 2.3.0 - /treeverse@1.0.4: - resolution: {integrity: sha512-whw60l7r+8ZU8Tu/Uc2yxtc4ZTZbR/PF3u1IPNKGQ6p8EICLb3Z2lAgoqw9bqYd8IkgnsaOcLzYHFckjqNsf0g==} - dev: true + tr46@0.0.3: {} - /trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + tree-kill@1.2.2: {} - /trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - dev: true + treeverse@1.0.4: {} - /ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + trim-newlines@3.0.1: {} + + trough@2.1.0: {} + + ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.9 @@ -10359,36 +14211,23 @@ packages: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + tsconfig-paths@3.14.2: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.6.0: - resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + tslib@2.6.0: {} - /tsutils@3.21.0(typescript@5.1.6): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.1.6): dependencies: tslib: 1.14.1 typescript: 5.1.6 - dev: true - /tty-table@4.2.1: - resolution: {integrity: sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==} - engines: {node: '>=8.0.0'} - hasBin: true + tty-table@4.2.1: dependencies: chalk: 4.1.2 csv: 5.5.3 @@ -10397,127 +14236,95 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 17.7.2 - dev: true - /tuf-js@1.1.7: - resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + tuf-js@1.1.7: dependencies: '@tufjs/models': 1.0.4 debug: 4.3.4(supports-color@8.1.1) make-fetch-happen: 11.1.1 transitivePeerDependencies: - supports-color - dev: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + tweetnacl@0.14.5: {} + + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-detect@3.0.0: - resolution: {integrity: sha512-pwZo7l1T0a8wmTMDc4FtXuHseRaqa9nyaUArp4xHaBMUlRzr72PvgF6ouXIIj5rjbVWqo8pZu6vw74jDKg4Dvw==} - dev: true + type-detect@3.0.0: {} - /type-detect@4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true + type-detect@4.0.8: {} - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true + type-fest@0.13.1: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type@2.7.2: {} + + typed-array-length@1.0.4: dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.10 - dev: true - /typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - dev: true + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 - /typescript-eslint-parser@18.0.0(typescript@5.1.6): - resolution: {integrity: sha512-Pn/A/Cw9ysiXSX5U1xjBmPQlxtWGV2o7jDNiH/u7KgBO2yC/y37wNFl2ogSrGZBQFuglLzGq0Xl0Bt31Jv44oA==} - engines: {node: '>=6.14.0'} - peerDependencies: - typescript: '*' + typedarray@0.0.6: {} + + typedoc@0.25.13(typescript@5.1.6): + dependencies: + lunr: 2.3.9 + marked: 4.3.0 + minimatch: 9.0.4 + shiki: 0.14.7 + typescript: 5.1.6 + + typescript-eslint-parser@18.0.0(typescript@5.1.6): dependencies: lodash.unescape: 4.0.1 semver: 5.5.0 typescript: 5.1.6 - dev: true - - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + typescript@5.1.6: {} + + ultron@1.1.1: {} + + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} - engines: {node: '>=4'} - dev: true + unicode-canonical-property-names-ecmascript@2.0.0: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 unicode-property-aliases-ecmascript: 2.1.0 - dev: true - /unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} - engines: {node: '>=4'} - dev: true + unicode-match-property-value-ecmascript@2.1.0: {} - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true + unicode-property-aliases-ecmascript@2.1.0: {} - /unified-engine@10.1.0: - resolution: {integrity: sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==} + unified-engine@10.1.0: dependencies: '@types/concat-stream': 2.0.0 '@types/debug': 4.1.8 @@ -10543,10 +14350,8 @@ packages: yaml: 2.3.1 transitivePeerDependencies: - supports-color - dev: true - /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + unified@10.1.2: dependencies: '@types/unist': 2.0.6 bail: 2.0.2 @@ -10555,213 +14360,162 @@ packages: is-plain-obj: 4.1.0 trough: 2.1.0 vfile: 5.3.7 - dev: true - /unique-filename@1.1.1: - resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + unique-filename@1.1.1: dependencies: unique-slug: 2.0.2 - dev: true - /unique-filename@2.0.1: - resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-filename@2.0.1: dependencies: unique-slug: 3.0.0 - dev: true - /unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 - dev: true - /unique-slug@2.0.2: - resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + unique-slug@2.0.2: dependencies: imurmurhash: 0.1.4 - dev: true - /unique-slug@3.0.0: - resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-slug@3.0.0: dependencies: imurmurhash: 0.1.4 - dev: true - /unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + unique-slug@4.0.0: dependencies: imurmurhash: 0.1.4 - dev: true - /unist-util-inspect@7.0.2: - resolution: {integrity: sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==} + unist-util-inspect@7.0.2: dependencies: '@types/unist': 2.0.6 - dev: true - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + unist-util-is@5.2.1: dependencies: '@types/unist': 2.0.6 - dev: true - /unist-util-position-from-estree@1.1.2: - resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} + unist-util-position-from-estree@1.1.2: dependencies: '@types/unist': 2.0.6 - dev: true - /unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} + unist-util-remove-position@4.0.2: dependencies: '@types/unist': 2.0.6 unist-util-visit: 4.1.2 - dev: true - /unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + unist-util-stringify-position@2.0.3: dependencies: '@types/unist': 2.0.6 - dev: true - /unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + unist-util-stringify-position@3.0.3: dependencies: '@types/unist': 2.0.6 - dev: true - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + unist-util-visit-parents@5.1.3: dependencies: '@types/unist': 2.0.6 unist-util-is: 5.2.1 - dev: true - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + unist-util-visit@4.1.2: dependencies: '@types/unist': 2.0.6 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - dev: true - /universal-user-agent@6.0.0: - resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} - dev: true + universal-user-agent@6.0.0: {} - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.1.2: {} - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} + universalify@2.0.0: {} - /untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - dev: true + unpipe@1.0.0: {} - /update-browserslist-db@1.0.11(browserslist@4.21.9): - resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + untildify@4.0.0: {} + + update-browserslist-db@1.0.11(browserslist@4.21.9): dependencies: browserslist: 4.21.9 escalade: 3.1.1 picocolors: 1.0.0 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.0 - dev: true - /url@0.10.3: - resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} + url-set-query@1.0.0: {} + + url@0.10.3: dependencies: punycode: 1.3.2 querystring: 0.2.0 - dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.0 - /util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + util@0.12.5: dependencies: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 is-typed-array: 1.1.10 which-typed-array: 1.1.9 - dev: true - /uuid@8.0.0: - resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} - hasBin: true - dev: true + utils-merge@1.0.1: {} - /uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - hasBin: true + uuid@3.4.0: {} + + uuid@8.0.0: {} + + uuid@9.0.1: {} + + uvu@0.5.6: dependencies: dequal: 2.0.3 diff: 5.1.0 kleur: 4.1.5 sade: 1.8.1 - dev: true - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + v8-compile-cache-lib@3.0.1: {} - /v8-to-istanbul@9.1.0: - resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@9.1.0: dependencies: '@jridgewell/trace-mapping': 0.3.18 '@types/istanbul-lib-coverage': 2.0.4 convert-source-map: 1.9.0 - dev: true - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validate-npm-package-name@3.0.0: - resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==} + validate-npm-package-name@3.0.0: dependencies: builtins: 1.0.3 - dev: true - /validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + validate-npm-package-name@5.0.0: dependencies: builtins: 5.0.1 - dev: true - /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + varint@5.0.2: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + vfile-message@3.1.4: dependencies: '@types/unist': 2.0.6 unist-util-stringify-position: 3.0.3 - dev: true - /vfile-reporter@7.0.5: - resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + vfile-reporter@7.0.5: dependencies: '@types/supports-color': 8.1.1 string-width: 5.1.2 @@ -10771,45 +14525,33 @@ packages: vfile-message: 3.1.4 vfile-sort: 3.0.1 vfile-statistics: 2.0.1 - dev: true - /vfile-sort@3.0.1: - resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + vfile-sort@3.0.1: dependencies: vfile: 5.3.7 vfile-message: 3.1.4 - dev: true - /vfile-statistics@2.0.1: - resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + vfile-statistics@2.0.1: dependencies: vfile: 5.3.7 vfile-message: 3.1.4 - dev: true - /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + vfile@5.3.7: dependencies: '@types/unist': 2.0.6 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - dev: true - /vinyl-file@3.0.0: - resolution: {integrity: sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==} - engines: {node: '>=4'} + vinyl-file@3.0.0: dependencies: graceful-fs: 4.2.11 pify: 2.3.0 strip-bom-buf: 1.0.0 strip-bom-stream: 2.0.0 vinyl: 2.2.1 - dev: true - /vinyl@2.2.1: - resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} - engines: {node: '>= 0.10'} + vinyl@2.2.1: dependencies: clone: 2.1.2 clone-buffer: 1.0.0 @@ -10817,64 +14559,230 @@ packages: cloneable-readable: 1.1.3 remove-trailing-separator: 1.1.0 replace-ext: 1.0.1 - dev: true - /walk-up-path@1.0.0: - resolution: {integrity: sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==} - dev: true + vscode-oniguruma@1.7.0: {} - /walk-up-path@3.0.1: - resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} - dev: true + vscode-textmate@8.0.0: {} - /walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + walk-up-path@1.0.0: {} + + walk-up-path@3.0.1: {} + + walker@1.0.8: dependencies: makeerror: 1.0.12 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + web3-bzz@1.9.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + '@types/node': 12.20.55 + got: 12.1.0 + swarm-js: 0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + web3-core-helpers@1.9.0: + dependencies: + web3-eth-iban: 1.9.0 + web3-utils: 1.9.0 + + web3-core-method@1.9.0: + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.9.0 + web3-core-promievent: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-utils: 1.9.0 + + web3-core-promievent@1.9.0: + dependencies: + eventemitter3: 4.0.4 + + web3-core-requestmanager@1.9.0(encoding@0.1.13): + dependencies: + util: 0.12.5 + web3-core-helpers: 1.9.0 + web3-providers-http: 1.9.0(encoding@0.1.13) + web3-providers-ipc: 1.9.0 + web3-providers-ws: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-core-subscriptions@1.9.0: + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.9.0 + + web3-core@1.9.0(encoding@0.1.13): + dependencies: + '@types/bn.js': 5.1.5 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.9.0 + web3-core-method: 1.9.0 + web3-core-requestmanager: 1.9.0(encoding@0.1.13) + web3-utils: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-abi@1.9.0: + dependencies: + '@ethersproject/abi': 5.7.0 + web3-utils: 1.9.0 + + web3-eth-accounts@1.9.0(encoding@0.1.13): + dependencies: + '@ethereumjs/common': 2.5.0 + '@ethereumjs/tx': 3.3.2 + eth-lib: 0.2.8 + ethereumjs-util: 7.1.5 + scrypt-js: 3.0.1 + uuid: 9.0.1 + web3-core: 1.9.0(encoding@0.1.13) + web3-core-helpers: 1.9.0 + web3-core-method: 1.9.0 + web3-utils: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-contract@1.9.0(encoding@0.1.13): + dependencies: + '@types/bn.js': 5.1.5 + web3-core: 1.9.0(encoding@0.1.13) + web3-core-helpers: 1.9.0 + web3-core-method: 1.9.0 + web3-core-promievent: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-eth-abi: 1.9.0 + web3-utils: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-ens@1.9.0(encoding@0.1.13): + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + web3-core: 1.9.0(encoding@0.1.13) + web3-core-helpers: 1.9.0 + web3-core-promievent: 1.9.0 + web3-eth-abi: 1.9.0 + web3-eth-contract: 1.9.0(encoding@0.1.13) + web3-utils: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-eth-iban@1.9.0: + dependencies: + bn.js: 5.2.1 + web3-utils: 1.9.0 + + web3-eth-personal@1.9.0(encoding@0.1.13): + dependencies: + '@types/node': 12.20.55 + web3-core: 1.9.0(encoding@0.1.13) + web3-core-helpers: 1.9.0 + web3-core-method: 1.9.0 + web3-net: 1.9.0(encoding@0.1.13) + web3-utils: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-net@1.9.0(encoding@0.1.13): + dependencies: + web3-core: 1.9.0(encoding@0.1.13) + web3-core-method: 1.9.0 + web3-utils: 1.9.0 + transitivePeerDependencies: + - encoding + - supports-color + + web3-providers-http@1.9.0(encoding@0.1.13): + dependencies: + abortcontroller-polyfill: 1.7.5 + cross-fetch: 3.1.8(encoding@0.1.13) + es6-promise: 4.2.8 + web3-core-helpers: 1.9.0 + transitivePeerDependencies: + - encoding + + web3-providers-ipc@1.9.0: + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.9.0 + + web3-providers-ws@1.9.0: + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.9.0 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + + web3-shh@1.9.0(encoding@0.1.13): + dependencies: + web3-core: 1.9.0(encoding@0.1.13) + web3-core-method: 1.9.0 + web3-core-subscriptions: 1.9.0 + web3-net: 1.9.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + web3-utils@1.9.0: + dependencies: + bn.js: 5.2.1 + ethereum-bloom-filters: 1.1.0 + ethereumjs-util: 7.1.5 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + + webidl-conversions@3.0.1: {} + + websocket@1.0.34: + dependencies: + bufferutil: 4.0.8 + debug: 2.6.9 + es5-ext: 0.10.64 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true + which-module@2.0.1: {} - /which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} - engines: {node: '>=8.15'} + which-pm@2.0.0: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 - dev: true - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.9: dependencies: available-typed-arrays: 1.0.5 call-bind: 1.0.2 @@ -10882,174 +14790,138 @@ packages: gopd: 1.0.1 has-tostringtag: 1.0.0 is-typed-array: 1.1.10 - dev: true - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + which@3.0.1: dependencies: isexe: 2.0.0 - dev: true - /wide-align@1.1.3: - resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + wide-align@1.1.3: dependencies: string-width: 2.1.1 - dev: true - /wide-align@1.1.5: - resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + wide-align@1.1.5: dependencies: string-width: 4.2.3 - dev: true - /widest-line@3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} + widest-line@3.1.0: dependencies: string-width: 4.2.3 - /word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.3: {} - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wordwrap@1.0.0: {} - /workerpool@6.1.4: - resolution: {integrity: sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==} - dev: true + workerpool@6.1.4: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /xml2js@0.5.0: - resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} - engines: {node: '>=4.0.0'} + ws@3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + + xhr-request-promise@0.1.3: + dependencies: + xhr-request: 1.1.0 + + xhr-request@1.1.0: + dependencies: + buffer-to-arraybuffer: 0.0.5 + object-assign: 4.1.1 + query-string: 5.1.1 + simple-get: 2.8.2 + timed-out: 4.0.1 + url-set-query: 1.0.0 + xhr: 2.6.0 + + xhr@2.6.0: + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + + xml2js@0.5.0: dependencies: sax: 1.2.1 xmlbuilder: 11.0.1 - dev: true - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: true + xmlbuilder@11.0.1: {} - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true + xtend@4.0.2: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@4.0.3: {} - /yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yaeti@0.0.6: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@2.1.2: {} - /yaml-eslint-parser@1.2.2: - resolution: {integrity: sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==} - engines: {node: ^14.17.0 || >=16.0.0} + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml-eslint-parser@1.2.2: dependencies: eslint-visitor-keys: 3.4.1 lodash: 4.17.21 yaml: 2.3.1 - dev: true - /yaml@2.3.1: - resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} - engines: {node: '>= 14'} - dev: true + yaml@2.3.1: {} - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: true - /yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.4: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} + yargs-unparser@2.0.0: dependencies: camelcase: 6.3.0 decamelize: 4.0.0 flat: 5.0.2 is-plain-obj: 2.1.0 - dev: true - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + yargs@15.4.1: dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -11062,11 +14934,8 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.1.1 @@ -11075,11 +14944,8 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.4 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.1.1 @@ -11088,12 +14954,8 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yeoman-environment@3.19.3: - resolution: {integrity: sha512-/+ODrTUHtlDPRH9qIC0JREH8+7nsRcjDl3Bxn2Xo/rvAaVvixH5275jHwg0C85g4QsF4P6M2ojfScPPAl+pLAg==} - engines: {node: '>=12.10.0'} - hasBin: true + yeoman-environment@3.19.3: dependencies: '@npmcli/arborist': 4.3.1 are-we-there-yet: 2.0.0 @@ -11135,22 +14997,14 @@ packages: transitivePeerDependencies: - bluebird - supports-color - dev: true - /yeoman-generator@5.9.0(yeoman-environment@3.19.3): - resolution: {integrity: sha512-sN1e01Db4fdd8P/n/yYvizfy77HdbwzvXmPxps9Gwz2D24slegrkSn+qyj+0nmZhtFwGX2i/cH29QDrvAFT9Aw==} - engines: {node: '>=12.10.0'} - peerDependencies: - yeoman-environment: ^3.2.0 - peerDependenciesMeta: - yeoman-environment: - optional: true + yeoman-generator@5.9.0(encoding@0.1.13)(mem-fs@2.3.0)(yeoman-environment@3.19.3): dependencies: chalk: 4.1.2 dargs: 7.0.0 debug: 4.3.4(supports-color@8.1.1) execa: 5.1.1 - github-username: 6.0.0 + github-username: 6.0.0(encoding@0.1.13) lodash: 4.17.21 mem-fs-editor: 9.7.0(mem-fs@2.3.0) minimist: 1.2.8 @@ -11161,31 +15015,16 @@ packages: shelljs: 0.8.5 sort-keys: 4.2.0 text-table: 0.2.0 + optionalDependencies: yeoman-environment: 3.19.3 transitivePeerDependencies: - bluebird - encoding - mem-fs - supports-color - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yn@3.1.1: {} - /zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - dev: true + yocto-queue@0.1.0: {} - file:packages/libs: - resolution: {directory: packages/libs, type: directory} - name: '@artela/aspect-libs' - dependencies: - as-proto: 1.3.0 - assemblyscript: 0.27.9 - dev: false + zwitch@2.0.4: {} From e7a7594b27ea1dff69a55931b9a0d029395bc40e Mon Sep 17 00:00:00 2001 From: No-Brainer <125658152+dumbeng@users.noreply.github.com> Date: Fri, 26 Jul 2024 15:31:00 +0800 Subject: [PATCH 11/17] fix: fix init command issue (#44) --- packages/toolkit/package.json | 2 +- packages/toolkit/src/commands/init.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 8250344..9d36493 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-tool", - "version": "0.0.59", + "version": "0.0.60", "description": "Dev tool for aspect to generate libs from solidity storage layout.", "engines": { "node": ">=14" diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index c0b507f..d200533 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -17,7 +17,7 @@ import { UnbindTmpl } from '../tmpl/scripts/unbind'; const isWinOS = /^win/i.test(process.platform); -const toolVersion = '^0.0.59'; +const toolVersion = '^0.0.60'; const libVersion = '^0.0.34'; const web3Version = '^1.9.22'; @@ -444,8 +444,8 @@ export default class Init extends Command { 'aspect:deploy': 'npm run aspect:build && node scripts/aspect-deploy.cjs', 'aspect:build': 'npm run asbuild:debug && npm run asbuild:release', 'aspect:gen': 'aspect-tool generate -i ./build/contract -o ./aspect/contract', - 'asbuild:debug': 'asc aspect/index.ts --target debug', - 'asbuild:release': 'asc aspect/index.ts --target release', + 'asbuild:debug': 'asc aspect/index.ts --target debug --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__', + 'asbuild:release': 'asc aspect/index.ts --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__', 'operation:call': 'node scripts/operation.cjs --isCall true', 'operation:send': 'node scripts/operation.cjs --isCall false', 'bound:aspect': 'node scripts/get-bound-aspect.cjs', From 2b932a48a534835e848c4923793ce19a82251152 Mon Sep 17 00:00:00 2001 From: Luke <129730838+LukeNinjaX@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:21:47 +0800 Subject: [PATCH 12/17] staging/07-22: add testcases (#55) * feat/evm cryptos (#36) * fix: add proto for evm crypto methods * fix: evm crytpo api methods * fix: add G1 and G2 for encoding params * fix: add uint256 * fix: remove parseInt * fix: bigModeExp use uint8array * fix: bn256Pairing result check * fix: ecRecover * fix: optimize bytes to hex * fix: blake2F * fix: Adjust the structure of blake2F to avoid the Array encoding problem of as proto * feat: added a host api for retrieving the current remaining gas in Aspect * fix: change call tree data from map to array & fixed some lint issue (#38) * feat: add code compression transform for aspect tool (#39) * feat: add init method & update tool scripts (#40) * dep: bump package version * tests: migrating integration test to new framework (#42) * tests: migrating old integration to new framework * tests: submit new test aspects * tests: add more test cases * tests: add default aspect compile args * tests: add cross-contract call tests * fest/aspect-system-contract (#43) * test: binding limit exceeded * test: remove print receipt for async send * test: adjust binding limit case * test: binding-unbinding, large aspect * fix: operation init entrance (#45) * fix: operation tests (#46) * fix/aspect host functions testcases (#47) * fix: properity testcase * fix: upgrade properity testcase * fix: add state test case * fix: context testcase * fix: statedb testcase * fix: joinpoint testcase * fix: crypto testcase * fix: evm call testcase * fix: state test typo * fix: add context key testcase * fix/contract type test(legacy/accesslist/dynamic-fee) (#48) * fix: add legacy/accesslist/dynamic-fee contract testcase * fix: disable checking context values * fix/intergration test cases (#49) * fix/aspect binding contracts limit (#50) * fix: aspect binding testcase * fix: more tests about binding multi contracts * fix/json rpc tests, namespace eth (#51) * fix: json rpc namespace eth tests * fix: testcases of json rpc eth * fix/testcase json rpc with namesapce except eth (#52) * fix: txpool testcases * fix: jsonrpc we3 testcases * fix: jsonrpc net testcases * fix: json rpc personal testcases * test: add lt/gt condition * test: json rpc debug runtime releated * test: testcase of traceTransaction and traceBlock * fix/pub sub (#53) * fix/propery converter (#54) * fix: aspect property * fix: use padding bytes for uint256 * test: update expect values * fix: fix sender address issue --------- Co-authored-by: Luke <129730838+luketheart@users.noreply.github.com> Co-authored-by: Jack Li Co-authored-by: No-Brainer <125658152+dumbeng@users.noreply.github.com> --- .gitmodules | 3 +- aspect-core | 2 +- package-lock.json | 1253 ++++- package.json | 3 + packages/libs/common/cryptos/point.ts | 44 + packages/libs/common/helper/convert.ts | 49 +- packages/libs/common/index.ts | 2 + packages/libs/common/wraptypes/uint256.ts | 393 ++ .../libs/components/aspect/aspect-property.ts | 6 +- packages/libs/hostapi/crypto-api.ts | 175 +- packages/libs/hostapi/util-api.ts | 11 +- packages/libs/package.json | 2 +- packages/libs/proto/aspect/v2/blake2finput.ts | 81 + packages/libs/proto/aspect/v2/block-input.ts | 12 +- .../libs/proto/aspect/v2/bn256add-input.ts | 59 + .../proto/aspect/v2/bn256pairing-input.ts | 60 + .../proto/aspect/v2/bn256scalar-mul-input.ts | 54 + packages/libs/proto/aspect/v2/bool-data.ts | 12 +- .../libs/proto/aspect/v2/bytes-array-data.ts | 12 +- packages/libs/proto/aspect/v2/bytes-data.ts | 12 +- .../libs/proto/aspect/v2/call-tree-query.ts | 12 +- .../libs/proto/aspect/v2/ec-recover-input.ts | 71 + .../libs/proto/aspect/v2/eth-access-list.ts | 18 +- .../libs/proto/aspect/v2/eth-access-tuple.ts | 17 +- .../libs/proto/aspect/v2/eth-call-message.ts | 16 +- .../libs/proto/aspect/v2/eth-call-tree.ts | 67 +- packages/libs/proto/aspect/v2/eth-log.ts | 14 +- packages/libs/proto/aspect/v2/eth-logs.ts | 14 +- packages/libs/proto/aspect/v2/eth-receipt.ts | 16 +- .../aspect/v2/eth-state-change-indices.ts | 12 +- .../libs/proto/aspect/v2/eth-state-change.ts | 14 +- .../libs/proto/aspect/v2/eth-state-changes.ts | 14 +- packages/libs/proto/aspect/v2/g1.ts | 51 + packages/libs/proto/aspect/v2/g2.ts | 71 + packages/libs/proto/aspect/v2/init-input.ts | 73 + .../libs/proto/aspect/v2/int-array-data.ts | 12 +- packages/libs/proto/aspect/v2/int-data.ts | 12 +- .../proto/aspect/v2/jit-inherent-request.ts | 14 +- .../proto/aspect/v2/jit-inherent-response.ts | 14 +- .../libs/proto/aspect/v2/no-from-tx-input.ts | 17 +- .../libs/proto/aspect/v2/operation-input.ts | 18 +- .../aspect/v2/post-contract-call-input.ts | 21 +- .../aspect/v2/post-exec-message-input.ts | 14 +- .../proto/aspect/v2/post-tx-execute-input.ts | 20 +- .../aspect/v2/pre-contract-call-input.ts | 21 +- .../proto/aspect/v2/pre-exec-message-input.ts | 14 +- .../proto/aspect/v2/pre-tx-execute-input.ts | 21 +- .../libs/proto/aspect/v2/receipt-input.ts | 12 +- .../proto/aspect/v2/state-change-query.ts | 16 +- .../proto/aspect/v2/static-call-request.ts | 14 +- .../proto/aspect/v2/static-call-result.ts | 18 +- .../libs/proto/aspect/v2/string-array-data.ts | 12 +- packages/libs/proto/aspect/v2/string-data.ts | 14 +- .../libs/proto/aspect/v2/tx-verify-input.ts | 18 +- packages/libs/proto/aspect/v2/uint-data.ts | 12 +- .../proto/aspect/v2/with-from-tx-input.ts | 14 +- packages/libs/proto/index.ts | 8 + packages/libs/types/aspect-entry.ts | 23 +- packages/libs/types/aspect-interface.ts | 19 +- packages/testcases/README.md | 2 +- .../aspect/abnormal-dead-loop-aspect.ts | 57 + .../aspect/abnormal-large-size-aspect-1m.ts | 59 + .../aspect/abnormal-large-size-aspect-300k.ts | 59 + packages/testcases/aspect/basic.ts | 60 + packages/testcases/aspect/black-list.ts | 3 +- packages/testcases/aspect/call-tree-aspect.ts | 73 + packages/testcases/aspect/context-aspect.ts | 3 + .../testcases/aspect/context-key-check.ts | 565 +-- .../aspect/context-permission-check.ts | 8 +- packages/testcases/aspect/contract-aspect.ts | 3 + .../testcases/aspect/cross-phase-property.ts | 3 + .../testcases/aspect/cross-phase-state.ts | 3 + .../aspect/crypto-ecrecover-aspect.ts | 3 + .../testcases/aspect/crypto-hash-aspect.ts | 3 + packages/testcases/aspect/float.ts | 35 + .../aspect/goplus/Intercept-large-tx.ts | 2 + packages/testcases/aspect/guard-by-count.ts | 3 + packages/testcases/aspect/guard-by-lock.ts | 7 +- packages/testcases/aspect/guard-by-trace.ts | 3 + packages/testcases/aspect/hostapi-crypto.ts | 437 ++ packages/testcases/aspect/hostapi.ts | 242 + packages/testcases/aspect/init-fail.ts | 42 + packages/testcases/aspect/init.ts | 73 + .../aspect/invalid-jit-call-aspect.ts | 3 + packages/testcases/aspect/jit-call.ts | 0 .../testcases/aspect/jit-gaming-aspect.ts | 276 ++ packages/testcases/aspect/joinpoints.ts | 563 +++ .../aspect/multi-read-write-check.ts | 3 + packages/testcases/aspect/operation-aspect.ts | 3 + packages/testcases/aspect/operation-test.ts | 19 +- packages/testcases/aspect/property.ts | 71 + packages/testcases/aspect/revert-aspect.ts | 63 + .../testcases/aspect/session-key-aspect.ts | 520 ++ packages/testcases/aspect/state-aspect.ts | 3 + packages/testcases/aspect/state.ts | 87 + .../aspect/{statedb-aspect.ts => statedb.ts} | 105 +- .../testcases/aspect/static-call-aspect.ts | 15 +- packages/testcases/aspect/storage-aspect.ts | 3 + packages/testcases/aspect/stress-test.ts | 10 +- packages/testcases/aspect/test-aspect.ts | 4 +- .../testcases/aspect/transient-storage.ts | 87 + .../testcases/aspect/type-check-aspect.ts | 3 + .../testcases/aspect/upgrade-test-aspect.ts | 3 + .../aspect/{verify-aspect.ts => verifier.ts} | 15 +- packages/testcases/build.sh | 5 +- packages/testcases/contracts/Caller.sol | 70 + packages/testcases/contracts/Counter.sol | 25 + .../testcases/contracts/HoneyPotAttack.sol | 54 + packages/testcases/contracts/Royale.sol | 392 ++ packages/testcases/contracts/SessionKey.sol | 56 + .../contracts/SimpleAccountFactory.sol | 3048 ++++++++++++ .../testcases/contracts/TransientStorage.sol | 27 + packages/testcases/contracts/event.sol | 16 + packages/testcases/contracts/storage.sol | 2 +- packages/testcases/package-lock.json | 4177 ++--------------- packages/testcases/package.json | 19 +- packages/testcases/project.config.json | 5 +- packages/testcases/tests/Test.js | 17 + packages/testcases/tests/actions/Action.js | 316 ++ .../tests/actions/AspectVersionAction.js | 14 + .../tests/actions/BindAspectAction.js | 31 + .../tests/actions/BindMultiAspectsAction.js | 31 + .../tests/actions/BindMultiContractsAction.js | 31 + .../tests/actions/CallContractAction.js | 90 + .../tests/actions/CallOperationAction.js | 64 + .../tests/actions/ChangeVersionAction.js | 21 + .../tests/actions/CreateAccountsAction.js | 34 + .../tests/actions/DeployAspectAction.js | 30 + .../tests/actions/DeployContractAction.js | 23 + .../tests/actions/DeployMultiAspectsAction.js | 38 + .../actions/DeployMultiContractsAction.js | 31 + .../actions/GetSessionKeyCallDataAction.js | 93 + .../testcases/tests/actions/JsonRPCAction.js | 93 + .../actions/QueryAspectBindingsAction.js | 13 + .../tests/actions/QueryBasicAction.js | 28 + .../actions/QueryContractBindingsAction.js | 20 + .../tests/actions/SubscriptionAction.js | 242 + .../testcases/tests/actions/TransferAction.js | 19 + .../tests/actions/UnbindAspectAction.js | 21 + .../tests/actions/UpgradeAspectAction.js | 27 + packages/testcases/tests/bese-test.js | 37 +- .../testcases/tests/context-key-check.test.js | 68 +- .../tests/context-permission-check.test.js | 2 +- .../tests/testcases/aspect-binding-test.json | 301 ++ .../aspect-core-fail-cases-test.json | 337 ++ .../aspect-abnormal-dead-loop-test.json | 107 + .../aspect-abnormal-large-size-test.json | 163 + ...binding-large-number-of-contract-test.json | 371 ++ .../binding-reach-limits-test.json | 172 + .../binding-unbinding-test.json | 339 ++ .../testcases/basic-compressed-test.json | 315 ++ .../testcases/basic-uncompressed-test.json | 241 + ...-multiple-verifier-with-contract-test.json | 77 + .../tests/testcases/change-version-test.json | 234 + .../tests/testcases/code-validation-test.json | 183 + .../contract-cases/contract-type-test.json | 315 ++ .../testcases/cross-contract-call-test.json | 272 ++ .../honeypot-guard-by-count-test.json | 406 ++ .../honeypot-guard-by-lock-test.json | 406 ++ .../testcases/hostapis/context-test.json | 234 + .../hostapis/crypto-bigModExp-test.json | 135 + .../hostapis/crypto-blake2F-test.json | 135 + .../hostapis/crypto-bn256Add-test.json | 135 + .../hostapis/crypto-bn256Pairing-test.json | 135 + .../hostapis/crypto-bn256ScalarMul-test.json | 135 + .../hostapis/crypto-ecRecovery-test.json | 135 + .../hostapis/crypto-others-test.json | 135 + .../testcases/hostapis/property-test.json | 309 ++ .../tests/testcases/hostapis/state-test.json | 419 ++ .../testcases/hostapis/statedb-test.json | 199 + .../testcases/hostapis/static-call-test.json | 202 + .../tests/testcases/jit-gaming-test.json | 271 ++ .../tests/testcases/joinpoints-test.json | 166 + .../json-rpc/json-rpc-debug-1-test.json | 424 ++ .../json-rpc/json-rpc-debug-2-test.json | 337 ++ .../testcases/json-rpc/json-rpc-eth-test.json | 1199 +++++ .../testcases/json-rpc/json-rpc-net-test.json | 55 + .../json-rpc/json-rpc-personal-test.json | 243 + .../json-rpc/json-rpc-txpool-test.json | 72 + .../json-rpc/json-rpc-web3-test.json | 38 + .../operation-cases/base-operation-test.json | 123 + .../tests/testcases/session-key-test.json | 307 ++ .../testcases/tests/testcases/sources.json | 487 ++ .../testcases/websocket/websocket-test.json | 48 + packages/testcases/tests/utils/TestManager.js | 494 ++ packages/toolkit/package-lock.json | 4 +- packages/toolkit/src/commands/init.ts | 47 +- packages/toolkit/src/tmpl/misc/transform.ts | 47 + .../toolkit/src/tmpl/scripts/aspect-deploy.ts | 9 +- packages/toolkit/src/tmpl/scripts/bind.ts | 2 +- .../toolkit/src/tmpl/scripts/contract-call.ts | 2 +- .../src/tmpl/scripts/contract-deploy.ts | 23 +- .../toolkit/src/tmpl/scripts/contract-send.ts | 6 +- .../toolkit/src/tmpl/scripts/operation.ts | 30 +- packages/toolkit/src/tmpl/scripts/unbind.ts | 2 +- 195 files changed, 22170 insertions(+), 4850 deletions(-) create mode 100644 packages/libs/common/cryptos/point.ts create mode 100644 packages/libs/common/wraptypes/uint256.ts create mode 100644 packages/libs/proto/aspect/v2/blake2finput.ts create mode 100644 packages/libs/proto/aspect/v2/bn256add-input.ts create mode 100644 packages/libs/proto/aspect/v2/bn256pairing-input.ts create mode 100644 packages/libs/proto/aspect/v2/bn256scalar-mul-input.ts create mode 100644 packages/libs/proto/aspect/v2/ec-recover-input.ts create mode 100644 packages/libs/proto/aspect/v2/g1.ts create mode 100644 packages/libs/proto/aspect/v2/g2.ts create mode 100644 packages/libs/proto/aspect/v2/init-input.ts create mode 100644 packages/testcases/aspect/abnormal-dead-loop-aspect.ts create mode 100644 packages/testcases/aspect/abnormal-large-size-aspect-1m.ts create mode 100644 packages/testcases/aspect/abnormal-large-size-aspect-300k.ts create mode 100644 packages/testcases/aspect/basic.ts create mode 100644 packages/testcases/aspect/call-tree-aspect.ts create mode 100644 packages/testcases/aspect/float.ts create mode 100644 packages/testcases/aspect/hostapi-crypto.ts create mode 100644 packages/testcases/aspect/hostapi.ts create mode 100644 packages/testcases/aspect/init-fail.ts create mode 100644 packages/testcases/aspect/init.ts create mode 100644 packages/testcases/aspect/jit-call.ts create mode 100644 packages/testcases/aspect/jit-gaming-aspect.ts create mode 100644 packages/testcases/aspect/joinpoints.ts create mode 100644 packages/testcases/aspect/property.ts create mode 100644 packages/testcases/aspect/revert-aspect.ts create mode 100644 packages/testcases/aspect/session-key-aspect.ts create mode 100644 packages/testcases/aspect/state.ts rename packages/testcases/aspect/{statedb-aspect.ts => statedb.ts} (59%) create mode 100644 packages/testcases/aspect/transient-storage.ts rename packages/testcases/aspect/{verify-aspect.ts => verifier.ts} (71%) create mode 100644 packages/testcases/contracts/Caller.sol create mode 100644 packages/testcases/contracts/Counter.sol create mode 100644 packages/testcases/contracts/HoneyPotAttack.sol create mode 100644 packages/testcases/contracts/Royale.sol create mode 100644 packages/testcases/contracts/SessionKey.sol create mode 100644 packages/testcases/contracts/SimpleAccountFactory.sol create mode 100644 packages/testcases/contracts/TransientStorage.sol create mode 100755 packages/testcases/contracts/event.sol create mode 100644 packages/testcases/tests/Test.js create mode 100644 packages/testcases/tests/actions/Action.js create mode 100644 packages/testcases/tests/actions/AspectVersionAction.js create mode 100644 packages/testcases/tests/actions/BindAspectAction.js create mode 100644 packages/testcases/tests/actions/BindMultiAspectsAction.js create mode 100644 packages/testcases/tests/actions/BindMultiContractsAction.js create mode 100644 packages/testcases/tests/actions/CallContractAction.js create mode 100644 packages/testcases/tests/actions/CallOperationAction.js create mode 100644 packages/testcases/tests/actions/ChangeVersionAction.js create mode 100644 packages/testcases/tests/actions/CreateAccountsAction.js create mode 100644 packages/testcases/tests/actions/DeployAspectAction.js create mode 100644 packages/testcases/tests/actions/DeployContractAction.js create mode 100644 packages/testcases/tests/actions/DeployMultiAspectsAction.js create mode 100644 packages/testcases/tests/actions/DeployMultiContractsAction.js create mode 100644 packages/testcases/tests/actions/GetSessionKeyCallDataAction.js create mode 100644 packages/testcases/tests/actions/JsonRPCAction.js create mode 100644 packages/testcases/tests/actions/QueryAspectBindingsAction.js create mode 100644 packages/testcases/tests/actions/QueryBasicAction.js create mode 100644 packages/testcases/tests/actions/QueryContractBindingsAction.js create mode 100644 packages/testcases/tests/actions/SubscriptionAction.js create mode 100644 packages/testcases/tests/actions/TransferAction.js create mode 100644 packages/testcases/tests/actions/UnbindAspectAction.js create mode 100644 packages/testcases/tests/actions/UpgradeAspectAction.js create mode 100644 packages/testcases/tests/testcases/aspect-binding-test.json create mode 100644 packages/testcases/tests/testcases/aspect-core-fail-cases-test.json create mode 100644 packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-dead-loop-test.json create mode 100644 packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-large-size-test.json create mode 100644 packages/testcases/tests/testcases/aspect-system-contract-cases/binding-large-number-of-contract-test.json create mode 100644 packages/testcases/tests/testcases/aspect-system-contract-cases/binding-reach-limits-test.json create mode 100644 packages/testcases/tests/testcases/aspect-system-contract-cases/binding-unbinding-test.json create mode 100644 packages/testcases/tests/testcases/basic-compressed-test.json create mode 100644 packages/testcases/tests/testcases/basic-uncompressed-test.json create mode 100644 packages/testcases/tests/testcases/bind-multiple-verifier-with-contract-test.json create mode 100644 packages/testcases/tests/testcases/change-version-test.json create mode 100644 packages/testcases/tests/testcases/code-validation-test.json create mode 100644 packages/testcases/tests/testcases/contract-cases/contract-type-test.json create mode 100644 packages/testcases/tests/testcases/cross-contract-call-test.json create mode 100644 packages/testcases/tests/testcases/honeypot-guard-by-count-test.json create mode 100644 packages/testcases/tests/testcases/honeypot-guard-by-lock-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/context-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-bigModExp-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-blake2F-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-bn256Add-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-bn256Pairing-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-bn256ScalarMul-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-ecRecovery-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/crypto-others-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/property-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/state-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/statedb-test.json create mode 100644 packages/testcases/tests/testcases/hostapis/static-call-test.json create mode 100644 packages/testcases/tests/testcases/jit-gaming-test.json create mode 100644 packages/testcases/tests/testcases/joinpoints-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-debug-1-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-debug-2-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-eth-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-net-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-personal-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-txpool-test.json create mode 100644 packages/testcases/tests/testcases/json-rpc/json-rpc-web3-test.json create mode 100644 packages/testcases/tests/testcases/operation-cases/base-operation-test.json create mode 100644 packages/testcases/tests/testcases/session-key-test.json create mode 100644 packages/testcases/tests/testcases/sources.json create mode 100644 packages/testcases/tests/testcases/websocket/websocket-test.json create mode 100644 packages/testcases/tests/utils/TestManager.js create mode 100644 packages/toolkit/src/tmpl/misc/transform.ts diff --git a/.gitmodules b/.gitmodules index 0f54abb..eb465d2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,5 @@ [submodule "aspect-core"] path = aspect-core url = https://github.com/artela-network/aspect-core.git - tag = v0.4.7-rc2 + branch = staging/07-22 +; tag = v0.4.7-rc2 diff --git a/aspect-core b/aspect-core index da840f5..777f50f 160000 --- a/aspect-core +++ b/aspect-core @@ -1 +1 @@ -Subproject commit da840f554b9e31ef6d8844c41e6b36d3502d1afb +Subproject commit 777f50f4c4d61720b40b648061bf762551348c5e diff --git a/package-lock.json b/package-lock.json index 8cb7f96..e67a684 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,10 +14,13 @@ "@changesets/cli": "^2.25.2", "@theguild/eslint-config": "^0.9.0", "@theguild/prettier-config": "^1.0.0", - "assemblyscript": "^0.24.1", + "@types/chai": "^4.3.16", + "assemblyscript": "^0.27.23", "babel-jest": "^29.3.1", + "chai": "^5.1.1", "eslint": "^8.31.0", "jest": "29.5.0", + "mocha": "^10.6.0", "prettier": "^2.8.2" }, "engines": { @@ -3519,6 +3522,13 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/chai": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", @@ -4208,27 +4218,38 @@ } }, "node_modules/assemblyscript": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.24.1.tgz", - "integrity": "sha512-uqR7NW0z/QFuqOkszoCb2F2jJI0VsmmmATRYG2JGzspC9nkct/8+6Pad7amCnIRriAC/T9AknEs+Qv/U/+fNpQ==", + "version": "0.27.29", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.29.tgz", + "integrity": "sha512-pH6udb7aE2F0t6cTh+0uCepmucykhMnAmm7k0kkAU3SY7LvpIngEBZWM6p5VCguu4EpmKGwEuZpZbEXzJ/frHQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "binaryen": "110.0.0-nightly.20221105", - "long": "^5.2.0" + "binaryen": "116.0.0-nightly.20240114", + "long": "^5.2.1" }, "bin": { "asc": "bin/asc.js", "asinit": "bin/asinit.js" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node": ">=16", + "npm": ">=7" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/assemblyscript" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -4502,11 +4523,25 @@ "node": ">=0.6" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/binaryen": { - "version": "110.0.0-nightly.20221105", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221105.tgz", - "integrity": "sha512-OBESOc51q3SwgG8Uv8nMzGnSq7LJpSB/Fu8B3AjlZg6YtCEwRnlDWlnwNB6mdql+VdexfKmNcsrs4K7MYidmdQ==", + "version": "116.0.0-nightly.20240114", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", + "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", "dev": true, + "license": "Apache-2.0", "bin": { "wasm-opt": "bin/wasm-opt", "wasm2js": "bin/wasm2js" @@ -4555,6 +4590,13 @@ "wcwidth": "^1.0.1" } }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, "node_modules/browserslist": { "version": "4.21.9", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", @@ -4749,6 +4791,23 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -4818,6 +4877,54 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -5025,10 +5132,11 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -5104,6 +5212,16 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5331,10 +5449,11 @@ } }, "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -6748,6 +6867,16 @@ "pkg-dir": "^4.2.0" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -6898,6 +7027,16 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -7158,6 +7297,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -7373,6 +7522,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", @@ -7731,6 +7893,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -9798,6 +9973,99 @@ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", @@ -9826,6 +10094,16 @@ "loose-envify": "cli.js" } }, + "node_modules/loupe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11171,67 +11449,341 @@ "node": ">= 8.0.0" } }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/mocha": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.6.0.tgz", + "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.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.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, "engines": { - "node": ">=4" + "node": ">= 14.0.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" }, - "node_modules/mvdan-sh": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/mvdan-sh/-/mvdan-sh-0.10.1.tgz", - "integrity": "sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==", - "dev": true + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true + "node_modules/mocha/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, + "license": "MIT", "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mvdan-sh": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/mvdan-sh/-/mvdan-sh-0.10.1.tgz", + "integrity": "sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true @@ -11654,6 +12206,16 @@ "node": ">=8" } }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -11971,6 +12533,16 @@ "node": ">=8" } }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -12087,6 +12659,19 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -12542,6 +13127,16 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -14195,6 +14790,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -14427,6 +15029,58 @@ "node": ">=6" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -17095,6 +17749,12 @@ "@babel/types": "^7.20.7" } }, + "@types/chai": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", + "dev": true + }, "@types/concat-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", @@ -17614,15 +18274,21 @@ "dev": true }, "assemblyscript": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.24.1.tgz", - "integrity": "sha512-uqR7NW0z/QFuqOkszoCb2F2jJI0VsmmmATRYG2JGzspC9nkct/8+6Pad7amCnIRriAC/T9AknEs+Qv/U/+fNpQ==", + "version": "0.27.29", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.29.tgz", + "integrity": "sha512-pH6udb7aE2F0t6cTh+0uCepmucykhMnAmm7k0kkAU3SY7LvpIngEBZWM6p5VCguu4EpmKGwEuZpZbEXzJ/frHQ==", "dev": true, "requires": { - "binaryen": "110.0.0-nightly.20221105", - "long": "^5.2.0" + "binaryen": "116.0.0-nightly.20240114", + "long": "^5.2.1" } }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -17828,10 +18494,16 @@ "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "dev": true }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, "binaryen": { - "version": "110.0.0-nightly.20221105", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-110.0.0-nightly.20221105.tgz", - "integrity": "sha512-OBESOc51q3SwgG8Uv8nMzGnSq7LJpSB/Fu8B3AjlZg6YtCEwRnlDWlnwNB6mdql+VdexfKmNcsrs4K7MYidmdQ==", + "version": "116.0.0-nightly.20240114", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", + "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", "dev": true }, "bplist-parser": { @@ -17871,6 +18543,12 @@ "wcwidth": "^1.0.1" } }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "browserslist": { "version": "4.21.9", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", @@ -17993,6 +18671,19 @@ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true }, + "chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "requires": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -18040,6 +18731,39 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -18211,9 +18935,9 @@ "dev": true }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "requires": { "ms": "2.1.2" @@ -18266,6 +18990,12 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true + }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -18411,9 +19141,9 @@ "dev": true }, "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true }, "diff-sequences": { @@ -19448,6 +20178,12 @@ "pkg-dir": "^4.2.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -19557,6 +20293,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, "get-intrinsic": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", @@ -19736,6 +20478,12 @@ "has-symbols": "^1.0.2" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -19893,7 +20641,16 @@ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" } }, "is-boolean-object": { @@ -20112,6 +20869,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -21657,6 +22420,67 @@ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "long": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", @@ -21678,6 +22502,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "loupe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -22572,6 +23405,195 @@ "integrity": "sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==", "dev": true }, + "mocha": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.6.0.tgz", + "integrity": "sha512-hxjt4+EEB0SA0ZDygSS015t65lJw/I2yRCS3Ae+SJ5FrbzrXgfYwJr96f0OvIXdj7h4lv/vLCrH3rkiuizFSvw==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.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.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "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-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, "mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -22924,6 +23946,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -23128,6 +24156,15 @@ "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -23222,6 +24259,15 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -23543,6 +24589,15 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -24804,6 +25859,12 @@ "is-typed-array": "^1.1.10" } }, + "workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -25007,6 +26068,38 @@ "decamelize": "^1.2.0" } }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + } + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 9972a3d..b159caa 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,13 @@ "@changesets/cli": "^2.25.2", "@theguild/eslint-config": "^0.9.0", "@theguild/prettier-config": "^1.0.0", + "@types/chai": "^4.3.16", "assemblyscript": "^0.27.23", "babel-jest": "^29.3.1", + "chai": "^5.1.1", "eslint": "^8.31.0", "jest": "29.5.0", + "mocha": "^10.6.0", "prettier": "^2.8.2" } } diff --git a/packages/libs/common/cryptos/point.ts b/packages/libs/common/cryptos/point.ts new file mode 100644 index 0000000..3fd46de --- /dev/null +++ b/packages/libs/common/cryptos/point.ts @@ -0,0 +1,44 @@ +import { Protobuf } from "as-proto/assembly"; +import { G1, G2 } from "../../proto"; +import { Uint256 } from "../wraptypes/uint256"; + +export class G1Point { + encode(): Uint8Array { + const g1 = new G1(this.x.toUint8Array(), this.y.toUint8Array()); + return Protobuf.encode(g1, G1.encode); + } + + decode(data: Uint8Array): G1Point { + const curlPoint = Protobuf.decode(data, G1.decode); + this.x = Uint256.fromUint8Array(curlPoint.x); + this.y = Uint256.fromUint8Array(curlPoint.y); + return this + } + + x: Uint256; + y: Uint256; + + constructor( + x: Uint256 = Uint256.ZERO, + y: Uint256 = Uint256.ZERO, + ) { + this.x = x; + this.y = y; + } +} + +export class G2Point { + x: Array; + y: Array; + + constructor( + x: Array = [Uint256.ZERO, Uint256.ZERO], + y: Array = [Uint256.ZERO, Uint256.ZERO], + ) { + if (x.length != 2 || y.length != 2) { + throw new Error("Array x,y must have a length of 2"); + } + this.x = x; + this.y = y; + } +} \ No newline at end of file diff --git a/packages/libs/common/helper/convert.ts b/packages/libs/common/helper/convert.ts index 7fc7fed..00b8292 100644 --- a/packages/libs/common/helper/convert.ts +++ b/packages/libs/common/helper/convert.ts @@ -1,21 +1,27 @@ import { ErrParseValueFail } from '../errors'; import { ethereum } from '../abi'; import { BigInt } from '../wraptypes/bigint'; +import { Uint256 } from '../wraptypes/uint256'; export function uint8ArrayToHex(data: Uint8Array, prefix: string = ''): string { const hexChars = '0123456789abcdef'; - let result = prefix; + const result = new Uint8Array((data.length << 1) + prefix.length); + + for (let i = 0; i < prefix.length; i++) { + result[i] = prefix.charCodeAt(i); + } for (let i = 0; i < data.length; i++) { const byte = data[i]; - result += hexChars.charAt(byte >> 4) + hexChars.charAt(byte & 0x0f); + result[(i << 1) + prefix.length] = hexChars.charCodeAt(byte >> 4); + result[(i << 1) + 1 + prefix.length] = hexChars.charCodeAt(byte & 0x0f); } - return result; + return String.UTF8.decode(result.buffer); } export function hexToUint8Array(hex: string): Uint8Array { - if (hex.length % 2 !== 0) { + if (hex.length & 1) { return new Uint8Array(0); } if (hex.startsWith('0x')) { @@ -131,7 +137,7 @@ export function base64Decode(str: string): Uint8Array { const buffer = new Uint8Array(length); let j = 0; - for (let i = 0; i < str.length; ) { + for (let i = 0; i < str.length;) { const c1 = base64chars.indexOf(str.charAt(i++)); const c2 = base64chars.indexOf(str.charAt(i++)); const c3 = base64chars.indexOf(str.charAt(i++)); @@ -271,6 +277,39 @@ export function fromUint8Array(value: Uint8Array): T { throw ErrParseValueFail; } +export function fromExternalUint8Array(value: Uint8Array): T { + if (isInteger()) { + if (isSigned()) { + /*const isNegative = (value[0] & 0x80) != 0; + // copy input to a new Uint8Array + let unsigned = new Uint8Array(32); */ + // TODO + throw new Error("Value must be a positive integer"); + } + + const u256Value = Uint256.fromUint8Array(value); + if (sizeof() == 1) { + return u256Value.toUInt8() as T; + } else if (sizeof() == 2) { + return u256Value.toUInt16() as T; + } else if (sizeof() == 4) { + return u256Value.toUInt32() as T; + } else if (sizeof() == 8) { + return u256Value.toUInt64() as T; + } + } else if (isBoolean()) { + return changetype(value.length > 0 && value[0] > 0); + } else if (idof() == idof()) { + return changetype(Uint256.fromUint8Array(value)); + } else if (idof() == idof()) { + return changetype(uint8ArrayToString(value)); + } else if (idof() == idof()) { + return value as T; + } + + throw new Error("convert failed"); +} + function booleanToUint8Array(value: bool): Uint8Array { const array = new Uint8Array(1); array[0] = value ? 1 : 0; diff --git a/packages/libs/common/index.ts b/packages/libs/common/index.ts index 351dec9..5eaa5f0 100644 --- a/packages/libs/common/index.ts +++ b/packages/libs/common/index.ts @@ -1,8 +1,10 @@ export * from './helper/message'; export * from './helper/convert'; export * from './wraptypes/basic-types'; +export * from './wraptypes/uint256'; export * from './wraptypes/bigint'; export * from './abi'; export * from './errors'; +export * from './cryptos/point'; diff --git a/packages/libs/common/wraptypes/uint256.ts b/packages/libs/common/wraptypes/uint256.ts new file mode 100644 index 0000000..abaa096 --- /dev/null +++ b/packages/libs/common/wraptypes/uint256.ts @@ -0,0 +1,393 @@ +export class Uint256 { + private data: Array = new Array(4); + + // Constructors + constructor(value: u64 = 0) { + this.data[0] = value; + this.data[1] = 0; + this.data[2] = 0; + this.data[3] = 0; + } + + private isZero(): bool { + return this.data[0] == 0 && this.data[1] == 0 && this.data[2] == 0 && this.data[3] == 0; + } + + private isValidHexCharacter(char: string): bool { + let charCode = char.charCodeAt(0); + return ( + (charCode >= 48 && charCode <= 57) || // 0-9 + (charCode >= 65 && charCode <= 70) || // A-F + (charCode >= 97 && charCode <= 102) // a-f + ); + } + + private isValidHexString(hexString: string): bool { + for (let i = 0; i < hexString.length; i++) { + if (!this.isValidHexCharacter(hexString.charAt(i))) { + return false; + } + } + return true; + } + + public add(other: Uint256): Uint256 { + let result = new Uint256(0); + let carry: u64 = 0; + + for (let i = 0; i < 4; i++) { + let sum = this.data[i] + other.data[i] + carry; + result.data[i] = sum; + + if (sum < this.data[i] || sum - carry < other.data[i]) { + carry = 1; + } else { + carry = 0; + } + } + + return result; + } + + public addU64(other: u64): Uint256 { + let result = new Uint256(0); + let carry: u64 = 0; + + let sum = this.data[0] + other + carry; + result.data[0] = sum; + if (sum < this.data[0]) { + carry = 1; + } else { + carry = 0; + } + + for (let i = 1; i < 4; i++) { + sum = this.data[i] + carry; + result.data[i] = sum; + if (sum < this.data[i]) { + carry = 1; + } else { + carry = 0; + } + } + + return result; + } + + public sub(other: Uint256): Uint256 { + let result = new Uint256(0); + let borrow: u64 = 0; + + for (let i = 0; i < 4; i++) { + let diff: u64; + let otherValue = other.data[i]; + + if (this.data[i] >= otherValue + borrow) { + diff = this.data[i] - otherValue - borrow; + borrow = 0; + } else { + diff = u64.MAX_VALUE - otherValue + this.data[i] + 1 - borrow; + borrow = 1; + } + + result.data[i] = diff; + } + + return result; + } + + public mul(other: Uint256): Uint256 { + let result = new Uint256(0); + + for (let i = 0; i < 4; i++) { + let carry: u64 = 0; + + for (let j = 0; j < 4; j++) { + if (i + j < 4) { + let product = this.data[j] * other.data[i] + result.data[i + j] + carry; + result.data[i + j] + result.data[i + j] = product; + + if (product < result.data[i + j]) { + carry = (product - result.data[i + j]) / u64.MAX_VALUE; + } else { + carry = 0; + } + } + } + } + return result; + } + + public div(other: Uint256): Uint256 { + if (other.isZero()) { + throw new Error("Division by zero"); + } + + let result = new Uint256(0); + let remainder = new Uint256(0); + for (let i = 3; i >= 0; i--) { + remainder = remainder.mulU64(u64.MAX_VALUE).addU64(this.data[i]); + if (!remainder.isZero()) { + let segmentResult = remainder.data[0] / other.data[0]; // Simplification + result.data[i] = segmentResult; + remainder = remainder.sub(other.mulU64(segmentResult)); + } + } + + return result; + } + + public divU64(other: u64): Uint256 { + if (other == 0) { + throw new Error("Division by zero"); + } + + let result = new Uint256(0); + let carry: u64 = 0; + + for (let i = 3; i >= 0; i--) { + let temp = (carry * u64.MAX_VALUE) + this.data[i]; + result.data[i] = temp / other; + carry = temp % other; + } + + return result; + } + + public mulU64(other: u64): Uint256 { + let result = new Uint256(0); + let carry: u64 = 0; + + for (let i = 0; i < 4; i++) { + let product = this.data[i] * other + carry; + result.data[i] = product; + + if (product < this.data[i]) { + carry = (product - result.data[i]) / u64.MAX_VALUE; + } else { + carry = 0; + } + } + + return result; + } + + public mod(other: Uint256): Uint256 { + return this.sub(this.div(other).mul(other)); + } + + // public mod64(other: u64): Uint256 { + // return this.sub(this.divU64(other).mulU64(other)) + // } + + public pow(exponent: u64): Uint256 { + let result = new Uint256(1); + let base = this.clone(); + + while (exponent > 0) { + if (exponent & 1) { + result = result.mul(base); + } + base = base.mul(base); + exponent >>= 1; + } + + return result; + } + + public sqrt(): Uint256 { + if (this.isZero()) { + return new Uint256(0); + } + + let x0 = new Uint256(1); + let x1 = this.add(x0).divU64(2); + + while (x1.sub(x0).data[3] == 0) { + x0 = x1; + x1 = x1.add(this.div(x1)).divU64(2); + } + + return x0; + } + + public cmp(other: Uint256): i32 { + for (let i = 3; i >= 0; i--) { + if (this.data[i] > other.data[i]) { + return 1; + } else if (this.data[i] < other.data[i]) { + return -1; + } + } + return 0; + } + + public toUint8Array(): Uint8Array { + let result = new Uint8Array(32); + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 8; j++) { + result[31 - ((i << 3) + j)] = (this.data[i] >> (j << 3)); + } + } + return result; + } + + public fromUint8Array(bytes: Uint8Array): Uint256 { + if (bytes.length > 32) { + throw new Error("Input length must be no more than 32"); + } + + let paddedBytes = new Uint8Array(32); + let length = bytes.length; + + paddedBytes.set(bytes.subarray(0, u32(length)), u32(32 - length)); + + let value = new Uint256(); + for (let i = 0; i < 4; i++) { + let u64value: u64 = 0; + for (let j = 0; j < 8; j++) { + let byteValue = (paddedBytes[31 - ((i << 3) + j)]); + u64value |= byteValue << (j << 3); + } + value.data[i] = u64value; + } + return value + } + + public toHex(): string { + const hexChars = '0123456789abcdef'; + const result = new Uint8Array(64); + + for (let i = 0; i < 4; i++) { + for (let j = 0; j < 8; j++) { + let byte = (this.data[i] >> (j << 3)); + let index = (i << 3) + j; + result[63 - (index << 1)] = hexChars.charCodeAt(byte & 0x0f); + result[63 - ((index << 1) + 1)] = hexChars.charCodeAt(byte >> 4); + } + } + return String.UTF8.decode(result.buffer); + } + + public fromHex(hexString: string): Uint256 { + if (hexString.startsWith("0x")) { + hexString = hexString.substring(2) + } + if (hexString.length > 64) { + throw new Error("Hex string length must be no more than 64 characters"); + } + + if (!this.isValidHexString(hexString)) { + throw new Error("Hex string is not valid"); + } + + hexString = hexString.padStart(64, '0'); + + let value = new Uint256(); + for (let i = 0; i < 4; i++) { + let u64value: u64 = 0; + for (let j = 0; j < 8; j++) { + let byteString = hexString.substring(62 - ((i << 4) + (j << 1)), 64 - ((i << 4) + (j << 1))); + // let byteValue = parseInt(byteString, 16); + let byteValue = U64.parseInt(byteString, 16); + u64value |= byteValue << (j << 3); + } + value.data[i] = u64value; + } + return value; + } + + // public fromDecimal(decimalString: string): Uint256 { + // } + // + // public toDecimal(): string { + // } + + public toInt8(): i8 { + return this.data[0]; + } + + public toUInt8(): u8 { + return this.data[0]; + } + + public toInt16(): i16 { + return this.data[0]; + } + + public toUInt16(): u16 { + return this.data[0]; + } + + public toInt32(): i32 { + return this.data[0]; + } + + public toUInt32(): u32 { + return this.data[0]; + } + + public toInt64(): i64 { + return this.data[0]; + } + + public toUInt64(): u64 { + return this.data[0]; + } + + public clone(): Uint256 { + let cloned = new Uint256(0); + for (let i = 0; i < 4; i++) { + cloned.data[i] = this.data[i]; + } + return cloned; + } + + static get ZERO(): Uint256 { + return new Uint256(0); + } + + static fromHex(hexString: string): Uint256 { + return new Uint256().fromHex(hexString); + } + + static toHex(value: Uint256): string { + return value.toHex(); + } + + // static fromDecimal(decimalString: string): Uint256 { + // return new Uint256().fromDecimal(decimalString); + // } + // + // static toDecimal(value: Uint256): string { + // return value.toDecimal(); + // } + + static fromUint8Array(data: Uint8Array): Uint256 { + return new Uint256().fromUint8Array(data); + } + + static toUint8Array(value: Uint256): Uint8Array { + return value.toUint8Array(); + } + + static fromInt16(value: i16): Uint256 { + return new Uint256(value); + } + static fromUInt16(value: u16): Uint256 { + return new Uint256(value); + } + static fromInt32(value: i32): Uint256 { + return new Uint256(value); + } + static fromUInt32(value: u32): Uint256 { + return new Uint256(value); + } + static fromInt64(value: i64): Uint256 { + return new Uint256(value); + } + static fromUInt64(value: u64): Uint256 { + return new Uint256(value); + } +} diff --git a/packages/libs/components/aspect/aspect-property.ts b/packages/libs/components/aspect/aspect-property.ts index 45ef860..3fab4a8 100644 --- a/packages/libs/components/aspect/aspect-property.ts +++ b/packages/libs/components/aspect/aspect-property.ts @@ -1,4 +1,4 @@ -import { fromUint8Array } from '../../common'; +import { fromExternalUint8Array } from '../../common'; import { AspectPropertyApi } from '../../hostapi'; const propertyApi = AspectPropertyApi.instance(); @@ -6,10 +6,10 @@ const propertyApi = AspectPropertyApi.instance(); export class AspectProperty { private static _instance: AspectProperty | null; - private constructor() {} + private constructor() { } public get(key: string): T { - return fromUint8Array(propertyApi.get(key)); + return fromExternalUint8Array(propertyApi.get(key)); } public static instance(): AspectProperty { diff --git a/packages/libs/hostapi/crypto-api.ts b/packages/libs/hostapi/crypto-api.ts index 4ff6191..34b97c3 100644 --- a/packages/libs/hostapi/crypto-api.ts +++ b/packages/libs/hostapi/crypto-api.ts @@ -1,4 +1,14 @@ -import { AUint8Array, BigInt, hexToUint8Array, uint8ArrayToHex } from '../common'; +import { Protobuf } from 'as-proto/assembly'; +import { AUint8Array, G1Point, G2Point, Uint256 } from '../common'; +import { + Blake2FInput, + Bn256AddInput, + Bn256PairingInput, + Bn256ScalarMulInput, + EcRecoverInput, + G1, + G2, +} from '../proto'; declare namespace __CryptoApi__ { function sha256(dataPtr: i32): i32; @@ -8,6 +18,16 @@ declare namespace __CryptoApi__ { function keccak(dataPtr: i32): i32; function ecRecover(dataPtr: i32): i32; + + function bigModExp(basePtr: i32, expPtr: i32, modPtr: i32): i32; + + function bn256Add(dataPtr: i32): i32; + + function bn256ScalarMul(dataPtr: i32): i32; + + function bn256Pairing(dataPtr: i32): i32; + + function blake2F(dataPtr: i32): i32; } export class CryptoApi { @@ -56,25 +76,14 @@ export class CryptoApi { * * @returns string returns an address, and not an address payable */ - public ecRecover(hash: string, v: BigInt, r: BigInt, s: BigInt): string { - if ( - v.countBits() == 0 || - r.countBits() == 0 || - s.countBits() == 0 || - v.countBits() > 256 || - r.countBits() > 256 || - s.countBits() > 256 - ) { - return ''; - } - const vStr = v.countBits() == 256 ? v.toString(16) : v.toString(16).padStart(64, '0'); - const rStr = r.countBits() == 256 ? r.toString(16) : r.toString(16).padStart(64, '0'); - const sStr = s.countBits() == 256 ? s.toString(16) : s.toString(16).padStart(64, '0'); - - //[msgHash 32B][v 32B][r 32B][s 32B] - const syscallInput = hash + vStr + rStr + sStr; - const ret = this._ecRecover(hexToUint8Array(syscallInput)); - return uint8ArrayToHex(ret); + public ecRecover(hash: Uint8Array, v: Uint256, r: Uint256, s: Uint256): Uint8Array { + const input = new EcRecoverInput(hash, v.toUint8Array(), r.toUint8Array(), s.toUint8Array()); + const inputPtr = new AUint8Array(Protobuf.encode(input, EcRecoverInput.encode)).store(); + + const ret = __CryptoApi__.ecRecover(inputPtr); + const resRaw = new AUint8Array(); + resRaw.load(ret); + return resRaw.body; } private _ecRecover(data: Uint8Array): Uint8Array { @@ -84,4 +93,130 @@ export class CryptoApi { resRaw.load(resPtr); return resRaw.body; } + + /** + * bigModExp implements a native big integer exponential modular operation. + * @param base + * @param exp + * @param mod + * + * @returns + */ + public bigModExp(base: Uint8Array, exp: Uint8Array, mod: Uint8Array): Uint8Array { + const basePtr = new AUint8Array(base).store(); + const expPtr = new AUint8Array(exp).store(); + const modPtr = new AUint8Array(mod).store(); + const resPtr = __CryptoApi__.bigModExp(basePtr, expPtr, modPtr); + const resRaw = new AUint8Array(); + resRaw.load(resPtr); + return resRaw.body; + } + + /** + * bn256Add implements a native elliptic curve point addition conforming to Istanbul consensus rules. + * @param a + * @param b + * + * @returns + */ + public bn256Add(a: G1Point, b: G1Point): G1Point { + const input = new Bn256AddInput( + new G1(a.x.toUint8Array(), a.y.toUint8Array()), + new G1(b.x.toUint8Array(), b.y.toUint8Array()), + ); + const inputPtr = new AUint8Array(Protobuf.encode(input, Bn256AddInput.encode)).store(); + + const resPtr = __CryptoApi__.bn256Add(inputPtr); + const resRaw = new AUint8Array(); + resRaw.load(resPtr); + return new G1Point().decode(resRaw.get()); + } + + /** + * bn256ScalarMul implements a native elliptic curve scalar multiplication conforming to Istanbul consensus rules. + * @param p + * @param scalar + * + * @returns + */ + public bn256ScalarMul(p: G1Point, scalar: Uint256): G1Point { + const input = new Bn256ScalarMulInput( + new G1(p.x.toUint8Array(), p.y.toUint8Array()), + scalar.toUint8Array(), + ); + const inputPtr = new AUint8Array(Protobuf.encode(input, Bn256ScalarMulInput.encode)).store(); + + const resPtr = __CryptoApi__.bn256ScalarMul(inputPtr); + const resRaw = new AUint8Array(); + resRaw.load(resPtr); + return new G1Point().decode(resRaw.get()); + } + + /** + * bn256Pairing implements a pairing pre-compile for the bn256 curve conforming to Istanbul consensus rules. + * @param input + * + * @returns + */ + public bn256Pairing(g1Points: G1Point[], g2Points: G2Point[]): bool { + if (g1Points.length != g2Points.length) { + return false; + } + + const cs: Array = []; + const ts: Array = []; + + for (let i = 0; i < g1Points.length; i++) { + const c = new G1(g1Points[i].x.toUint8Array(), g1Points[i].y.toUint8Array()); + const t = new G2( + g2Points[i].x[0].toUint8Array(), + g2Points[i].x[1].toUint8Array(), + g2Points[i].y[0].toUint8Array(), + g2Points[i].y[1].toUint8Array(), + ); + cs.push(c); + ts.push(t); + } + + const input = new Bn256PairingInput(cs, ts); + const inputPtr = new AUint8Array(Protobuf.encode(input, Bn256PairingInput.encode)).store(); + + const resPtr = __CryptoApi__.bn256Pairing(inputPtr); + const resRaw = new AUint8Array(); + resRaw.load(resPtr); + if (resRaw.get().length != 32) { + return false; + } + return resRaw.get().at(31) == 1; + } + + /** + * blake2F implements blake2F to Istanbul consensus rules. + * @param h + * @param m + * @param t + * @param final + * @param rounds + * @returns + */ + public blake2F( + h: Uint8Array, + m: Uint8Array, + t: Uint8Array, + final: bool, + rounds: Uint8Array, + ): Uint8Array { + if (h.length != 64 || m.length != 128 || t.length != 16 || rounds.length != 4) { + return new Uint8Array(0); + } + + const input = new Blake2FInput(h, m, t, final, rounds); + const inputPtr = new AUint8Array(Protobuf.encode(input, Blake2FInput.encode)).store(); + + const resPtr = __CryptoApi__.blake2F(inputPtr); + const resRaw = new AUint8Array(); + resRaw.load(resPtr); + + return resRaw.get(); + } } diff --git a/packages/libs/hostapi/util-api.ts b/packages/libs/hostapi/util-api.ts index 016c760..beb4186 100644 --- a/packages/libs/hostapi/util-api.ts +++ b/packages/libs/hostapi/util-api.ts @@ -1,9 +1,11 @@ -import { AString } from '../common'; +import { AI64, AString } from '../common'; declare namespace __UtilApi__ { function revert(ptr: i32): void; function sLog(ptr: i32): void; + + function gas(): i32; } export class UtilApi { @@ -26,6 +28,13 @@ export class UtilApi { throw new Error(message); } + public gas(): i64 { + const ret = __UtilApi__.gas(); + const gas = new AI64(); + gas.load(ret); + return gas.get(); + } + public log(data: string): void { const dataPtr = new AString(data).store(); __UtilApi__.sLog(dataPtr); diff --git a/packages/libs/package.json b/packages/libs/package.json index cc7b59c..30a47fe 100644 --- a/packages/libs/package.json +++ b/packages/libs/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-libs", - "version": "0.0.34", + "version": "0.0.36", "description": "AssemblyScript library for writing Artela Aspect", "main": "index.ts", "module": "index.ts", diff --git a/packages/libs/proto/aspect/v2/blake2finput.ts b/packages/libs/proto/aspect/v2/blake2finput.ts new file mode 100644 index 0000000..fe875c1 --- /dev/null +++ b/packages/libs/proto/aspect/v2/blake2finput.ts @@ -0,0 +1,81 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; + +export class Blake2FInput { + static encode(message: Blake2FInput, writer: Writer): void { + writer.uint32(10); + writer.bytes(message.h); + + writer.uint32(18); + writer.bytes(message.m); + + writer.uint32(26); + writer.bytes(message.t); + + writer.uint32(32); + writer.bool(message.final); + + writer.uint32(42); + writer.bytes(message.rounds); + } + + static decode(reader: Reader, length: i32): Blake2FInput { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new Blake2FInput(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.h = reader.bytes(); + break; + + case 2: + message.m = reader.bytes(); + break; + + case 3: + message.t = reader.bytes(); + break; + + case 4: + message.final = reader.bool(); + break; + + case 5: + message.rounds = reader.bytes(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + h: Uint8Array; + m: Uint8Array; + t: Uint8Array; + final: bool; + rounds: Uint8Array; + + constructor( + h: Uint8Array = new Uint8Array(0), + m: Uint8Array = new Uint8Array(0), + t: Uint8Array = new Uint8Array(0), + final: bool = false, + rounds: Uint8Array = new Uint8Array(0) + ) { + this.h = h; + this.m = m; + this.t = t; + this.final = final; + this.rounds = rounds; + } +} diff --git a/packages/libs/proto/aspect/v2/block-input.ts b/packages/libs/proto/aspect/v2/block-input.ts index e6ddd79..181d1db 100644 --- a/packages/libs/proto/aspect/v2/block-input.ts +++ b/packages/libs/proto/aspect/v2/block-input.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class BlockInput { static encode(message: BlockInput, writer: Writer): void { @@ -37,11 +37,3 @@ export class BlockInput { this.number = number; } } - -export function encodeBlockInput(message: BlockInput): Uint8Array { - return Protobuf.encode(message, BlockInput.encode); -} - -export function decodeBlockInput(buffer: Uint8Array): BlockInput { - return Protobuf.decode(buffer, BlockInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/bn256add-input.ts b/packages/libs/proto/aspect/v2/bn256add-input.ts new file mode 100644 index 0000000..637e68a --- /dev/null +++ b/packages/libs/proto/aspect/v2/bn256add-input.ts @@ -0,0 +1,59 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; +import { G1 } from "./g1"; + +export class Bn256AddInput { + static encode(message: Bn256AddInput, writer: Writer): void { + const a = message.a; + if (a !== null) { + writer.uint32(10); + writer.fork(); + G1.encode(a, writer); + writer.ldelim(); + } + + const b = message.b; + if (b !== null) { + writer.uint32(18); + writer.fork(); + G1.encode(b, writer); + writer.ldelim(); + } + } + + static decode(reader: Reader, length: i32): Bn256AddInput { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new Bn256AddInput(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.a = G1.decode(reader, reader.uint32()); + break; + + case 2: + message.b = G1.decode(reader, reader.uint32()); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + a: G1 | null; + b: G1 | null; + + constructor(a: G1 | null = null, b: G1 | null = null) { + this.a = a; + this.b = b; + } +} diff --git a/packages/libs/proto/aspect/v2/bn256pairing-input.ts b/packages/libs/proto/aspect/v2/bn256pairing-input.ts new file mode 100644 index 0000000..9e0ac2c --- /dev/null +++ b/packages/libs/proto/aspect/v2/bn256pairing-input.ts @@ -0,0 +1,60 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; +import { G1 } from "./g1"; +import { G2 } from "./g2"; + +export class Bn256PairingInput { + static encode(message: Bn256PairingInput, writer: Writer): void { + const cs = message.cs; + for (let i: i32 = 0; i < cs.length; ++i) { + writer.uint32(10); + writer.fork(); + G1.encode(cs[i], writer); + writer.ldelim(); + } + + const ts = message.ts; + for (let i: i32 = 0; i < ts.length; ++i) { + writer.uint32(18); + writer.fork(); + G2.encode(ts[i], writer); + writer.ldelim(); + } + } + + static decode(reader: Reader, length: i32): Bn256PairingInput { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new Bn256PairingInput(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.cs.push(G1.decode(reader, reader.uint32())); + break; + + case 2: + message.ts.push(G2.decode(reader, reader.uint32())); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + cs: Array; + ts: Array; + + constructor(cs: Array = [], ts: Array = []) { + this.cs = cs; + this.ts = ts; + } +} diff --git a/packages/libs/proto/aspect/v2/bn256scalar-mul-input.ts b/packages/libs/proto/aspect/v2/bn256scalar-mul-input.ts new file mode 100644 index 0000000..4257d08 --- /dev/null +++ b/packages/libs/proto/aspect/v2/bn256scalar-mul-input.ts @@ -0,0 +1,54 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; +import { G1 } from "./g1"; + +export class Bn256ScalarMulInput { + static encode(message: Bn256ScalarMulInput, writer: Writer): void { + const a = message.a; + if (a !== null) { + writer.uint32(10); + writer.fork(); + G1.encode(a, writer); + writer.ldelim(); + } + + writer.uint32(18); + writer.bytes(message.scalar); + } + + static decode(reader: Reader, length: i32): Bn256ScalarMulInput { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new Bn256ScalarMulInput(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.a = G1.decode(reader, reader.uint32()); + break; + + case 2: + message.scalar = reader.bytes(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + a: G1 | null; + scalar: Uint8Array; + + constructor(a: G1 | null = null, scalar: Uint8Array = new Uint8Array(0)) { + this.a = a; + this.scalar = scalar; + } +} diff --git a/packages/libs/proto/aspect/v2/bool-data.ts b/packages/libs/proto/aspect/v2/bool-data.ts index c608fc1..bc3121c 100644 --- a/packages/libs/proto/aspect/v2/bool-data.ts +++ b/packages/libs/proto/aspect/v2/bool-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class BoolData { static encode(message: BoolData, writer: Writer): void { @@ -37,11 +37,3 @@ export class BoolData { this.data = data; } } - -export function encodeBoolData(message: BoolData): Uint8Array { - return Protobuf.encode(message, BoolData.encode); -} - -export function decodeBoolData(buffer: Uint8Array): BoolData { - return Protobuf.decode(buffer, BoolData.decode); -} diff --git a/packages/libs/proto/aspect/v2/bytes-array-data.ts b/packages/libs/proto/aspect/v2/bytes-array-data.ts index 81d83c6..b6ee39e 100644 --- a/packages/libs/proto/aspect/v2/bytes-array-data.ts +++ b/packages/libs/proto/aspect/v2/bytes-array-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class BytesArrayData { static encode(message: BytesArrayData, writer: Writer): void { @@ -42,11 +42,3 @@ export class BytesArrayData { this.data = data; } } - -export function encodeBytesArrayData(message: BytesArrayData): Uint8Array { - return Protobuf.encode(message, BytesArrayData.encode); -} - -export function decodeBytesArrayData(buffer: Uint8Array): BytesArrayData { - return Protobuf.decode(buffer, BytesArrayData.decode); -} diff --git a/packages/libs/proto/aspect/v2/bytes-data.ts b/packages/libs/proto/aspect/v2/bytes-data.ts index 3cd91a1..56b5f34 100644 --- a/packages/libs/proto/aspect/v2/bytes-data.ts +++ b/packages/libs/proto/aspect/v2/bytes-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class BytesData { static encode(message: BytesData, writer: Writer): void { @@ -37,11 +37,3 @@ export class BytesData { this.data = data; } } - -export function encodeBytesData(message: BytesData): Uint8Array { - return Protobuf.encode(message, BytesData.encode); -} - -export function decodeBytesData(buffer: Uint8Array): BytesData { - return Protobuf.decode(buffer, BytesData.decode); -} diff --git a/packages/libs/proto/aspect/v2/call-tree-query.ts b/packages/libs/proto/aspect/v2/call-tree-query.ts index 45d51ae..0b1f113 100644 --- a/packages/libs/proto/aspect/v2/call-tree-query.ts +++ b/packages/libs/proto/aspect/v2/call-tree-query.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class CallTreeQuery { static encode(message: CallTreeQuery, writer: Writer): void { @@ -37,11 +37,3 @@ export class CallTreeQuery { this.callIdx = callIdx; } } - -export function encodeCallTreeQuery(message: CallTreeQuery): Uint8Array { - return Protobuf.encode(message, CallTreeQuery.encode); -} - -export function decodeCallTreeQuery(buffer: Uint8Array): CallTreeQuery { - return Protobuf.decode(buffer, CallTreeQuery.decode); -} diff --git a/packages/libs/proto/aspect/v2/ec-recover-input.ts b/packages/libs/proto/aspect/v2/ec-recover-input.ts new file mode 100644 index 0000000..0e0e4a3 --- /dev/null +++ b/packages/libs/proto/aspect/v2/ec-recover-input.ts @@ -0,0 +1,71 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; + +export class EcRecoverInput { + static encode(message: EcRecoverInput, writer: Writer): void { + writer.uint32(10); + writer.bytes(message.hash); + + writer.uint32(18); + writer.bytes(message.v); + + writer.uint32(26); + writer.bytes(message.r); + + writer.uint32(34); + writer.bytes(message.s); + } + + static decode(reader: Reader, length: i32): EcRecoverInput { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new EcRecoverInput(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.hash = reader.bytes(); + break; + + case 2: + message.v = reader.bytes(); + break; + + case 3: + message.r = reader.bytes(); + break; + + case 4: + message.s = reader.bytes(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + hash: Uint8Array; + v: Uint8Array; + r: Uint8Array; + s: Uint8Array; + + constructor( + hash: Uint8Array = new Uint8Array(0), + v: Uint8Array = new Uint8Array(0), + r: Uint8Array = new Uint8Array(0), + s: Uint8Array = new Uint8Array(0) + ) { + this.hash = hash; + this.v = v; + this.r = r; + this.s = s; + } +} diff --git a/packages/libs/proto/aspect/v2/eth-access-list.ts b/packages/libs/proto/aspect/v2/eth-access-list.ts index ca9ef37..a2190fb 100644 --- a/packages/libs/proto/aspect/v2/eth-access-list.ts +++ b/packages/libs/proto/aspect/v2/eth-access-list.ts @@ -1,10 +1,10 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { EthAccessTuple } from './eth-access-tuple'; +import { Writer, Reader } from "as-proto/assembly"; +import { EthAccessTuple } from "./eth-access-tuple"; export class EthAccessList { static encode(message: EthAccessList, writer: Writer): void { @@ -25,7 +25,9 @@ export class EthAccessList { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - message.accessList.push(EthAccessTuple.decode(reader, reader.uint32())); + message.accessList.push( + EthAccessTuple.decode(reader, reader.uint32()) + ); break; default: @@ -43,11 +45,3 @@ export class EthAccessList { this.accessList = accessList; } } - -export function encodeEthAccessList(message: EthAccessList): Uint8Array { - return Protobuf.encode(message, EthAccessList.encode); -} - -export function decodeEthAccessList(buffer: Uint8Array): EthAccessList { - return Protobuf.decode(buffer, EthAccessList.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-access-tuple.ts b/packages/libs/proto/aspect/v2/eth-access-tuple.ts index 42de7f3..fc3f0bc 100644 --- a/packages/libs/proto/aspect/v2/eth-access-tuple.ts +++ b/packages/libs/proto/aspect/v2/eth-access-tuple.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class EthAccessTuple { static encode(message: EthAccessTuple, writer: Writer): void { @@ -46,16 +46,11 @@ export class EthAccessTuple { address: Uint8Array; storageKeys: Array; - constructor(address: Uint8Array = new Uint8Array(0), storageKeys: Array = []) { + constructor( + address: Uint8Array = new Uint8Array(0), + storageKeys: Array = [] + ) { this.address = address; this.storageKeys = storageKeys; } } - -export function encodeEthAccessTuple(message: EthAccessTuple): Uint8Array { - return Protobuf.encode(message, EthAccessTuple.encode); -} - -export function decodeEthAccessTuple(buffer: Uint8Array): EthAccessTuple { - return Protobuf.decode(buffer, EthAccessTuple.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-call-message.ts b/packages/libs/proto/aspect/v2/eth-call-message.ts index 0f04605..db5f31b 100644 --- a/packages/libs/proto/aspect/v2/eth-call-message.ts +++ b/packages/libs/proto/aspect/v2/eth-call-message.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class EthCallMessage { static encode(message: EthCallMessage, writer: Writer): void { @@ -126,10 +126,10 @@ export class EthCallMessage { value: Uint8Array = new Uint8Array(0), ret: Uint8Array = new Uint8Array(0), gasUsed: u64 = 0, - error: string = '', + error: string = "", index: u64 = 0, parentIndex: i64 = 0, - childrenIndices: Array = [], + childrenIndices: Array = [] ) { this.from = from; this.to = to; @@ -144,11 +144,3 @@ export class EthCallMessage { this.childrenIndices = childrenIndices; } } - -export function encodeEthCallMessage(message: EthCallMessage): Uint8Array { - return Protobuf.encode(message, EthCallMessage.encode); -} - -export function decodeEthCallMessage(buffer: Uint8Array): EthCallMessage { - return Protobuf.decode(buffer, EthCallMessage.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-call-tree.ts b/packages/libs/proto/aspect/v2/eth-call-tree.ts index c544933..2256544 100644 --- a/packages/libs/proto/aspect/v2/eth-call-tree.ts +++ b/packages/libs/proto/aspect/v2/eth-call-tree.ts @@ -1,28 +1,19 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { EthCallMessage } from './eth-call-message'; +import { Writer, Reader } from "as-proto/assembly"; +import { EthCallMessage } from "./eth-call-message"; export class EthCallTree { static encode(message: EthCallTree, writer: Writer): void { const calls = message.calls; - if (calls !== null) { - const callsKeys = calls.keys(); - for (let i: i32 = 0; i < callsKeys.length; ++i) { - const callsKey = callsKeys[i]; - writer.uint32(10); - writer.fork(); - writer.uint32(8); - writer.uint64(callsKey); - writer.uint32(18); - writer.fork(); - EthCallMessage.encode(calls.get(callsKey), writer); - writer.ldelim(); - writer.ldelim(); - } + for (let i: i32 = 0; i < calls.length; ++i) { + writer.uint32(10); + writer.fork(); + EthCallMessage.encode(calls[i], writer); + writer.ldelim(); } } @@ -34,35 +25,7 @@ export class EthCallTree { const tag = reader.uint32(); switch (tag >>> 3) { case 1: - let callsKey: u64 = 0; - let callsValue: EthCallMessage | null = null; - let callsHasKey: bool = false; - let callsHasValue: bool = false; - for (const end: usize = reader.ptr + reader.uint32(); reader.ptr < end; ) { - const tag = reader.uint32(); - switch (tag >>> 3) { - case 1: - callsKey = reader.uint64(); - callsHasKey = true; - break; - - case 2: - callsValue = EthCallMessage.decode(reader, reader.uint32()); - callsHasValue = true; - break; - - default: - reader.skipType(tag & 7); - break; - } - if (message.calls === null) { - message.calls = new Map(); - } - const calls = message.calls; - if (calls !== null && callsHasKey && callsHasValue && callsValue !== null) { - calls.set(callsKey, callsValue); - } - } + message.calls.push(EthCallMessage.decode(reader, reader.uint32())); break; default: @@ -74,17 +37,9 @@ export class EthCallTree { return message; } - calls: Map; + calls: Array; - constructor(calls: Map = new Map()) { + constructor(calls: Array = []) { this.calls = calls; } } - -export function encodeEthCallTree(message: EthCallTree): Uint8Array { - return Protobuf.encode(message, EthCallTree.encode); -} - -export function decodeEthCallTree(buffer: Uint8Array): EthCallTree { - return Protobuf.decode(buffer, EthCallTree.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-log.ts b/packages/libs/proto/aspect/v2/eth-log.ts index c323b8e..181c594 100644 --- a/packages/libs/proto/aspect/v2/eth-log.ts +++ b/packages/libs/proto/aspect/v2/eth-log.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class EthLog { static encode(message: EthLog, writer: Writer): void { @@ -66,7 +66,7 @@ export class EthLog { address: Uint8Array = new Uint8Array(0), topics: Array = [], data: Uint8Array = new Uint8Array(0), - index: u64 = 0, + index: u64 = 0 ) { this.address = address; this.topics = topics; @@ -74,11 +74,3 @@ export class EthLog { this.index = index; } } - -export function encodeEthLog(message: EthLog): Uint8Array { - return Protobuf.encode(message, EthLog.encode); -} - -export function decodeEthLog(buffer: Uint8Array): EthLog { - return Protobuf.decode(buffer, EthLog.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-logs.ts b/packages/libs/proto/aspect/v2/eth-logs.ts index 2def2cb..2f0e354 100644 --- a/packages/libs/proto/aspect/v2/eth-logs.ts +++ b/packages/libs/proto/aspect/v2/eth-logs.ts @@ -1,10 +1,10 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { EthLog } from './eth-log'; +import { Writer, Reader } from "as-proto/assembly"; +import { EthLog } from "./eth-log"; export class EthLogs { static encode(message: EthLogs, writer: Writer): void { @@ -43,11 +43,3 @@ export class EthLogs { this.logs = logs; } } - -export function encodeEthLogs(message: EthLogs): Uint8Array { - return Protobuf.encode(message, EthLogs.encode); -} - -export function decodeEthLogs(buffer: Uint8Array): EthLogs { - return Protobuf.decode(buffer, EthLogs.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-receipt.ts b/packages/libs/proto/aspect/v2/eth-receipt.ts index 6428af3..edef438 100644 --- a/packages/libs/proto/aspect/v2/eth-receipt.ts +++ b/packages/libs/proto/aspect/v2/eth-receipt.ts @@ -1,10 +1,10 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { EthLog } from './eth-log'; +import { Writer, Reader } from "as-proto/assembly"; +import { EthLog } from "./eth-log"; export class EthReceipt { static encode(message: EthReceipt, writer: Writer): void { @@ -76,7 +76,7 @@ export class EthReceipt { cumulativeGasUsed: u64 = 0, logsBloom: Uint8Array = new Uint8Array(0), effectiveGasPrice: Uint8Array = new Uint8Array(0), - logs: Array = [], + logs: Array = [] ) { this.status = status; this.cumulativeGasUsed = cumulativeGasUsed; @@ -85,11 +85,3 @@ export class EthReceipt { this.logs = logs; } } - -export function encodeEthReceipt(message: EthReceipt): Uint8Array { - return Protobuf.encode(message, EthReceipt.encode); -} - -export function decodeEthReceipt(buffer: Uint8Array): EthReceipt { - return Protobuf.decode(buffer, EthReceipt.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-state-change-indices.ts b/packages/libs/proto/aspect/v2/eth-state-change-indices.ts index 7d139f2..960b765 100644 --- a/packages/libs/proto/aspect/v2/eth-state-change-indices.ts +++ b/packages/libs/proto/aspect/v2/eth-state-change-indices.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class EthStateChangeIndices { static encode(message: EthStateChangeIndices, writer: Writer): void { @@ -42,11 +42,3 @@ export class EthStateChangeIndices { this.indices = indices; } } - -export function encodeEthStateChangeIndices(message: EthStateChangeIndices): Uint8Array { - return Protobuf.encode(message, EthStateChangeIndices.encode); -} - -export function decodeEthStateChangeIndices(buffer: Uint8Array): EthStateChangeIndices { - return Protobuf.decode(buffer, EthStateChangeIndices.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-state-change.ts b/packages/libs/proto/aspect/v2/eth-state-change.ts index c43dc8b..a20407f 100644 --- a/packages/libs/proto/aspect/v2/eth-state-change.ts +++ b/packages/libs/proto/aspect/v2/eth-state-change.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class EthStateChange { static encode(message: EthStateChange, writer: Writer): void { @@ -52,18 +52,10 @@ export class EthStateChange { constructor( account: Uint8Array = new Uint8Array(0), value: Uint8Array = new Uint8Array(0), - callIndex: u64 = 0, + callIndex: u64 = 0 ) { this.account = account; this.value = value; this.callIndex = callIndex; } } - -export function encodeEthStateChange(message: EthStateChange): Uint8Array { - return Protobuf.encode(message, EthStateChange.encode); -} - -export function decodeEthStateChange(buffer: Uint8Array): EthStateChange { - return Protobuf.decode(buffer, EthStateChange.decode); -} diff --git a/packages/libs/proto/aspect/v2/eth-state-changes.ts b/packages/libs/proto/aspect/v2/eth-state-changes.ts index 7b16e99..28255b5 100644 --- a/packages/libs/proto/aspect/v2/eth-state-changes.ts +++ b/packages/libs/proto/aspect/v2/eth-state-changes.ts @@ -1,10 +1,10 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { EthStateChange } from './eth-state-change'; +import { Writer, Reader } from "as-proto/assembly"; +import { EthStateChange } from "./eth-state-change"; export class EthStateChanges { static encode(message: EthStateChanges, writer: Writer): void { @@ -43,11 +43,3 @@ export class EthStateChanges { this.all = all; } } - -export function encodeEthStateChanges(message: EthStateChanges): Uint8Array { - return Protobuf.encode(message, EthStateChanges.encode); -} - -export function decodeEthStateChanges(buffer: Uint8Array): EthStateChanges { - return Protobuf.decode(buffer, EthStateChanges.decode); -} diff --git a/packages/libs/proto/aspect/v2/g1.ts b/packages/libs/proto/aspect/v2/g1.ts new file mode 100644 index 0000000..02c6110 --- /dev/null +++ b/packages/libs/proto/aspect/v2/g1.ts @@ -0,0 +1,51 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; + +export class G1 { + static encode(message: G1, writer: Writer): void { + writer.uint32(10); + writer.bytes(message.x); + + writer.uint32(18); + writer.bytes(message.y); + } + + static decode(reader: Reader, length: i32): G1 { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new G1(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.x = reader.bytes(); + break; + + case 2: + message.y = reader.bytes(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + x: Uint8Array; + y: Uint8Array; + + constructor( + x: Uint8Array = new Uint8Array(0), + y: Uint8Array = new Uint8Array(0) + ) { + this.x = x; + this.y = y; + } +} diff --git a/packages/libs/proto/aspect/v2/g2.ts b/packages/libs/proto/aspect/v2/g2.ts new file mode 100644 index 0000000..f62dd41 --- /dev/null +++ b/packages/libs/proto/aspect/v2/g2.ts @@ -0,0 +1,71 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; + +export class G2 { + static encode(message: G2, writer: Writer): void { + writer.uint32(10); + writer.bytes(message.x1); + + writer.uint32(18); + writer.bytes(message.x2); + + writer.uint32(26); + writer.bytes(message.y1); + + writer.uint32(34); + writer.bytes(message.y2); + } + + static decode(reader: Reader, length: i32): G2 { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new G2(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.x1 = reader.bytes(); + break; + + case 2: + message.x2 = reader.bytes(); + break; + + case 3: + message.y1 = reader.bytes(); + break; + + case 4: + message.y2 = reader.bytes(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + x1: Uint8Array; + x2: Uint8Array; + y1: Uint8Array; + y2: Uint8Array; + + constructor( + x1: Uint8Array = new Uint8Array(0), + x2: Uint8Array = new Uint8Array(0), + y1: Uint8Array = new Uint8Array(0), + y2: Uint8Array = new Uint8Array(0) + ) { + this.x1 = x1; + this.x2 = x2; + this.y1 = y1; + this.y2 = y2; + } +} diff --git a/packages/libs/proto/aspect/v2/init-input.ts b/packages/libs/proto/aspect/v2/init-input.ts new file mode 100644 index 0000000..6af9020 --- /dev/null +++ b/packages/libs/proto/aspect/v2/init-input.ts @@ -0,0 +1,73 @@ +// Code generated by protoc-gen-as. DO NOT EDIT. +// Versions: +// protoc-gen-as v1.3.0 +// protoc v5.27.1 + +import { Writer, Reader } from "as-proto/assembly"; +import { WithFromTxInput } from "./with-from-tx-input"; +import { BlockInput } from "./block-input"; + +export class InitInput { + static encode(message: InitInput, writer: Writer): void { + const tx = message.tx; + if (tx !== null) { + writer.uint32(10); + writer.fork(); + WithFromTxInput.encode(tx, writer); + writer.ldelim(); + } + + const block = message.block; + if (block !== null) { + writer.uint32(18); + writer.fork(); + BlockInput.encode(block, writer); + writer.ldelim(); + } + + writer.uint32(26); + writer.bytes(message.callData); + } + + static decode(reader: Reader, length: i32): InitInput { + const end: usize = length < 0 ? reader.end : reader.ptr + length; + const message = new InitInput(); + + while (reader.ptr < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.tx = WithFromTxInput.decode(reader, reader.uint32()); + break; + + case 2: + message.block = BlockInput.decode(reader, reader.uint32()); + break; + + case 3: + message.callData = reader.bytes(); + break; + + default: + reader.skipType(tag & 7); + break; + } + } + + return message; + } + + tx: WithFromTxInput | null; + block: BlockInput | null; + callData: Uint8Array; + + constructor( + tx: WithFromTxInput | null = null, + block: BlockInput | null = null, + callData: Uint8Array = new Uint8Array(0) + ) { + this.tx = tx; + this.block = block; + this.callData = callData; + } +} diff --git a/packages/libs/proto/aspect/v2/int-array-data.ts b/packages/libs/proto/aspect/v2/int-array-data.ts index 0c485ab..951220f 100644 --- a/packages/libs/proto/aspect/v2/int-array-data.ts +++ b/packages/libs/proto/aspect/v2/int-array-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class IntArrayData { static encode(message: IntArrayData, writer: Writer): void { @@ -42,11 +42,3 @@ export class IntArrayData { this.data = data; } } - -export function encodeIntArrayData(message: IntArrayData): Uint8Array { - return Protobuf.encode(message, IntArrayData.encode); -} - -export function decodeIntArrayData(buffer: Uint8Array): IntArrayData { - return Protobuf.decode(buffer, IntArrayData.decode); -} diff --git a/packages/libs/proto/aspect/v2/int-data.ts b/packages/libs/proto/aspect/v2/int-data.ts index fe2508c..f586e4c 100644 --- a/packages/libs/proto/aspect/v2/int-data.ts +++ b/packages/libs/proto/aspect/v2/int-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class IntData { static encode(message: IntData, writer: Writer): void { @@ -37,11 +37,3 @@ export class IntData { this.data = data; } } - -export function encodeIntData(message: IntData): Uint8Array { - return Protobuf.encode(message, IntData.encode); -} - -export function decodeIntData(buffer: Uint8Array): IntData { - return Protobuf.decode(buffer, IntData.decode); -} diff --git a/packages/libs/proto/aspect/v2/jit-inherent-request.ts b/packages/libs/proto/aspect/v2/jit-inherent-request.ts index e2439eb..a2182e9 100644 --- a/packages/libs/proto/aspect/v2/jit-inherent-request.ts +++ b/packages/libs/proto/aspect/v2/jit-inherent-request.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class JitInherentRequest { static encode(message: JitInherentRequest, writer: Writer): void { @@ -97,7 +97,7 @@ export class JitInherentRequest { callData: Uint8Array = new Uint8Array(0), callGasLimit: u64 = 0, verificationGasLimit: u64 = 0, - paymasterAndData: Uint8Array = new Uint8Array(0), + paymasterAndData: Uint8Array = new Uint8Array(0) ) { this.sender = sender; this.nonce = nonce; @@ -109,11 +109,3 @@ export class JitInherentRequest { this.paymasterAndData = paymasterAndData; } } - -export function encodeJitInherentRequest(message: JitInherentRequest): Uint8Array { - return Protobuf.encode(message, JitInherentRequest.encode); -} - -export function decodeJitInherentRequest(buffer: Uint8Array): JitInherentRequest { - return Protobuf.decode(buffer, JitInherentRequest.decode); -} diff --git a/packages/libs/proto/aspect/v2/jit-inherent-response.ts b/packages/libs/proto/aspect/v2/jit-inherent-response.ts index 5918904..ce90534 100644 --- a/packages/libs/proto/aspect/v2/jit-inherent-response.ts +++ b/packages/libs/proto/aspect/v2/jit-inherent-response.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class JitInherentResponse { static encode(message: JitInherentResponse, writer: Writer): void { @@ -75,7 +75,7 @@ export class JitInherentResponse { txHash: Uint8Array = new Uint8Array(0), success: bool = false, ret: Uint8Array = new Uint8Array(0), - errorMsg: string = '', + errorMsg: string = "" ) { this.jitInherentHashes = jitInherentHashes; this.txHash = txHash; @@ -84,11 +84,3 @@ export class JitInherentResponse { this.errorMsg = errorMsg; } } - -export function encodeJitInherentResponse(message: JitInherentResponse): Uint8Array { - return Protobuf.encode(message, JitInherentResponse.encode); -} - -export function decodeJitInherentResponse(buffer: Uint8Array): JitInherentResponse { - return Protobuf.decode(buffer, JitInherentResponse.decode); -} diff --git a/packages/libs/proto/aspect/v2/no-from-tx-input.ts b/packages/libs/proto/aspect/v2/no-from-tx-input.ts index 108fed6..7ec623f 100644 --- a/packages/libs/proto/aspect/v2/no-from-tx-input.ts +++ b/packages/libs/proto/aspect/v2/no-from-tx-input.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class NoFromTxInput { static encode(message: NoFromTxInput, writer: Writer): void { @@ -41,16 +41,11 @@ export class NoFromTxInput { hash: Uint8Array; to: Uint8Array; - constructor(hash: Uint8Array = new Uint8Array(0), to: Uint8Array = new Uint8Array(0)) { + constructor( + hash: Uint8Array = new Uint8Array(0), + to: Uint8Array = new Uint8Array(0) + ) { this.hash = hash; this.to = to; } } - -export function encodeNoFromTxInput(message: NoFromTxInput): Uint8Array { - return Protobuf.encode(message, NoFromTxInput.encode); -} - -export function decodeNoFromTxInput(buffer: Uint8Array): NoFromTxInput { - return Protobuf.decode(buffer, NoFromTxInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/operation-input.ts b/packages/libs/proto/aspect/v2/operation-input.ts index 3cc9d7f..05a63ce 100644 --- a/packages/libs/proto/aspect/v2/operation-input.ts +++ b/packages/libs/proto/aspect/v2/operation-input.ts @@ -1,11 +1,11 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { BlockInput } from './block-input'; -import { WithFromTxInput } from './with-from-tx-input'; +import { Writer, Reader } from "as-proto/assembly"; +import { WithFromTxInput } from "./with-from-tx-input"; +import { BlockInput } from "./block-input"; export class OperationInput { static encode(message: OperationInput, writer: Writer): void { @@ -64,18 +64,10 @@ export class OperationInput { constructor( tx: WithFromTxInput | null = null, block: BlockInput | null = null, - callData: Uint8Array = new Uint8Array(0), + callData: Uint8Array = new Uint8Array(0) ) { this.tx = tx; this.block = block; this.callData = callData; } } - -export function encodeOperationInput(message: OperationInput): Uint8Array { - return Protobuf.encode(message, OperationInput.encode); -} - -export function decodeOperationInput(buffer: Uint8Array): OperationInput { - return Protobuf.decode(buffer, OperationInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/post-contract-call-input.ts b/packages/libs/proto/aspect/v2/post-contract-call-input.ts index 5b70d37..2be3279 100644 --- a/packages/libs/proto/aspect/v2/post-contract-call-input.ts +++ b/packages/libs/proto/aspect/v2/post-contract-call-input.ts @@ -1,11 +1,11 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { BlockInput } from './block-input'; -import { PostExecMessageInput } from './post-exec-message-input'; +import { Writer, Reader } from "as-proto/assembly"; +import { PostExecMessageInput } from "./post-exec-message-input"; +import { BlockInput } from "./block-input"; export class PostContractCallInput { static encode(message: PostContractCallInput, writer: Writer): void { @@ -53,16 +53,11 @@ export class PostContractCallInput { call: PostExecMessageInput | null; block: BlockInput | null; - constructor(call: PostExecMessageInput | null = null, block: BlockInput | null = null) { + constructor( + call: PostExecMessageInput | null = null, + block: BlockInput | null = null + ) { this.call = call; this.block = block; } } - -export function encodePostContractCallInput(message: PostContractCallInput): Uint8Array { - return Protobuf.encode(message, PostContractCallInput.encode); -} - -export function decodePostContractCallInput(buffer: Uint8Array): PostContractCallInput { - return Protobuf.decode(buffer, PostContractCallInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/post-exec-message-input.ts b/packages/libs/proto/aspect/v2/post-exec-message-input.ts index bc847d5..6f781a3 100644 --- a/packages/libs/proto/aspect/v2/post-exec-message-input.ts +++ b/packages/libs/proto/aspect/v2/post-exec-message-input.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class PostExecMessageInput { static encode(message: PostExecMessageInput, writer: Writer): void { @@ -97,7 +97,7 @@ export class PostExecMessageInput { value: Uint8Array = new Uint8Array(0), gas: u64 = 0, ret: Uint8Array = new Uint8Array(0), - error: string = '', + error: string = "" ) { this.from = from; this.to = to; @@ -109,11 +109,3 @@ export class PostExecMessageInput { this.error = error; } } - -export function encodePostExecMessageInput(message: PostExecMessageInput): Uint8Array { - return Protobuf.encode(message, PostExecMessageInput.encode); -} - -export function decodePostExecMessageInput(buffer: Uint8Array): PostExecMessageInput { - return Protobuf.decode(buffer, PostExecMessageInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/post-tx-execute-input.ts b/packages/libs/proto/aspect/v2/post-tx-execute-input.ts index c2a5ac9..aeecc1d 100644 --- a/packages/libs/proto/aspect/v2/post-tx-execute-input.ts +++ b/packages/libs/proto/aspect/v2/post-tx-execute-input.ts @@ -1,12 +1,12 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { BlockInput } from './block-input'; -import { ReceiptInput } from './receipt-input'; -import { WithFromTxInput } from './with-from-tx-input'; +import { Writer, Reader } from "as-proto/assembly"; +import { WithFromTxInput } from "./with-from-tx-input"; +import { BlockInput } from "./block-input"; +import { ReceiptInput } from "./receipt-input"; export class PostTxExecuteInput { static encode(message: PostTxExecuteInput, writer: Writer): void { @@ -70,18 +70,10 @@ export class PostTxExecuteInput { constructor( tx: WithFromTxInput | null = null, block: BlockInput | null = null, - receipt: ReceiptInput | null = null, + receipt: ReceiptInput | null = null ) { this.tx = tx; this.block = block; this.receipt = receipt; } } - -export function encodePostTxExecuteInput(message: PostTxExecuteInput): Uint8Array { - return Protobuf.encode(message, PostTxExecuteInput.encode); -} - -export function decodePostTxExecuteInput(buffer: Uint8Array): PostTxExecuteInput { - return Protobuf.decode(buffer, PostTxExecuteInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/pre-contract-call-input.ts b/packages/libs/proto/aspect/v2/pre-contract-call-input.ts index 6adcfc4..98fec70 100644 --- a/packages/libs/proto/aspect/v2/pre-contract-call-input.ts +++ b/packages/libs/proto/aspect/v2/pre-contract-call-input.ts @@ -1,11 +1,11 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { BlockInput } from './block-input'; -import { PreExecMessageInput } from './pre-exec-message-input'; +import { Writer, Reader } from "as-proto/assembly"; +import { PreExecMessageInput } from "./pre-exec-message-input"; +import { BlockInput } from "./block-input"; export class PreContractCallInput { static encode(message: PreContractCallInput, writer: Writer): void { @@ -53,16 +53,11 @@ export class PreContractCallInput { call: PreExecMessageInput | null; block: BlockInput | null; - constructor(call: PreExecMessageInput | null = null, block: BlockInput | null = null) { + constructor( + call: PreExecMessageInput | null = null, + block: BlockInput | null = null + ) { this.call = call; this.block = block; } } - -export function encodePreContractCallInput(message: PreContractCallInput): Uint8Array { - return Protobuf.encode(message, PreContractCallInput.encode); -} - -export function decodePreContractCallInput(buffer: Uint8Array): PreContractCallInput { - return Protobuf.decode(buffer, PreContractCallInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/pre-exec-message-input.ts b/packages/libs/proto/aspect/v2/pre-exec-message-input.ts index 23644f5..81c1d82 100644 --- a/packages/libs/proto/aspect/v2/pre-exec-message-input.ts +++ b/packages/libs/proto/aspect/v2/pre-exec-message-input.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class PreExecMessageInput { static encode(message: PreExecMessageInput, writer: Writer): void { @@ -79,7 +79,7 @@ export class PreExecMessageInput { index: u64 = 0, data: Uint8Array = new Uint8Array(0), value: Uint8Array = new Uint8Array(0), - gas: u64 = 0, + gas: u64 = 0 ) { this.from = from; this.to = to; @@ -89,11 +89,3 @@ export class PreExecMessageInput { this.gas = gas; } } - -export function encodePreExecMessageInput(message: PreExecMessageInput): Uint8Array { - return Protobuf.encode(message, PreExecMessageInput.encode); -} - -export function decodePreExecMessageInput(buffer: Uint8Array): PreExecMessageInput { - return Protobuf.decode(buffer, PreExecMessageInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/pre-tx-execute-input.ts b/packages/libs/proto/aspect/v2/pre-tx-execute-input.ts index 51ecc38..6875c42 100644 --- a/packages/libs/proto/aspect/v2/pre-tx-execute-input.ts +++ b/packages/libs/proto/aspect/v2/pre-tx-execute-input.ts @@ -1,11 +1,11 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { BlockInput } from './block-input'; -import { WithFromTxInput } from './with-from-tx-input'; +import { Writer, Reader } from "as-proto/assembly"; +import { WithFromTxInput } from "./with-from-tx-input"; +import { BlockInput } from "./block-input"; export class PreTxExecuteInput { static encode(message: PreTxExecuteInput, writer: Writer): void { @@ -53,16 +53,11 @@ export class PreTxExecuteInput { tx: WithFromTxInput | null; block: BlockInput | null; - constructor(tx: WithFromTxInput | null = null, block: BlockInput | null = null) { + constructor( + tx: WithFromTxInput | null = null, + block: BlockInput | null = null + ) { this.tx = tx; this.block = block; } } - -export function encodePreTxExecuteInput(message: PreTxExecuteInput): Uint8Array { - return Protobuf.encode(message, PreTxExecuteInput.encode); -} - -export function decodePreTxExecuteInput(buffer: Uint8Array): PreTxExecuteInput { - return Protobuf.decode(buffer, PreTxExecuteInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/receipt-input.ts b/packages/libs/proto/aspect/v2/receipt-input.ts index 1f7b4f9..4cdf7a5 100644 --- a/packages/libs/proto/aspect/v2/receipt-input.ts +++ b/packages/libs/proto/aspect/v2/receipt-input.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class ReceiptInput { static encode(message: ReceiptInput, writer: Writer): void { @@ -37,11 +37,3 @@ export class ReceiptInput { this.status = status; } } - -export function encodeReceiptInput(message: ReceiptInput): Uint8Array { - return Protobuf.encode(message, ReceiptInput.encode); -} - -export function decodeReceiptInput(buffer: Uint8Array): ReceiptInput { - return Protobuf.decode(buffer, ReceiptInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/state-change-query.ts b/packages/libs/proto/aspect/v2/state-change-query.ts index f68d429..fccafb8 100644 --- a/packages/libs/proto/aspect/v2/state-change-query.ts +++ b/packages/libs/proto/aspect/v2/state-change-query.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class StateChangeQuery { static encode(message: StateChangeQuery, writer: Writer): void { @@ -56,19 +56,11 @@ export class StateChangeQuery { constructor( account: Uint8Array = new Uint8Array(0), - stateVarName: string = '', - indices: Array = [], + stateVarName: string = "", + indices: Array = [] ) { this.account = account; this.stateVarName = stateVarName; this.indices = indices; } } - -export function encodeStateChangeQuery(message: StateChangeQuery): Uint8Array { - return Protobuf.encode(message, StateChangeQuery.encode); -} - -export function decodeStateChangeQuery(buffer: Uint8Array): StateChangeQuery { - return Protobuf.decode(buffer, StateChangeQuery.decode); -} diff --git a/packages/libs/proto/aspect/v2/static-call-request.ts b/packages/libs/proto/aspect/v2/static-call-request.ts index 695b899..81ccb08 100644 --- a/packages/libs/proto/aspect/v2/static-call-request.ts +++ b/packages/libs/proto/aspect/v2/static-call-request.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class StaticCallRequest { static encode(message: StaticCallRequest, writer: Writer): void { @@ -61,7 +61,7 @@ export class StaticCallRequest { from: Uint8Array = new Uint8Array(0), to: Uint8Array = new Uint8Array(0), data: Uint8Array = new Uint8Array(0), - gas: u64 = 0, + gas: u64 = 0 ) { this.from = from; this.to = to; @@ -69,11 +69,3 @@ export class StaticCallRequest { this.gas = gas; } } - -export function encodeStaticCallRequest(message: StaticCallRequest): Uint8Array { - return Protobuf.encode(message, StaticCallRequest.encode); -} - -export function decodeStaticCallRequest(buffer: Uint8Array): StaticCallRequest { - return Protobuf.decode(buffer, StaticCallRequest.decode); -} diff --git a/packages/libs/proto/aspect/v2/static-call-result.ts b/packages/libs/proto/aspect/v2/static-call-result.ts index 0a83d65..843b86a 100644 --- a/packages/libs/proto/aspect/v2/static-call-result.ts +++ b/packages/libs/proto/aspect/v2/static-call-result.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class StaticCallResult { static encode(message: StaticCallResult, writer: Writer): void { @@ -49,17 +49,13 @@ export class StaticCallResult { vmError: string; gasLeft: u64; - constructor(ret: Uint8Array = new Uint8Array(0), vmError: string = '', gasLeft: u64 = 0) { + constructor( + ret: Uint8Array = new Uint8Array(0), + vmError: string = "", + gasLeft: u64 = 0 + ) { this.ret = ret; this.vmError = vmError; this.gasLeft = gasLeft; } } - -export function encodeStaticCallResult(message: StaticCallResult): Uint8Array { - return Protobuf.encode(message, StaticCallResult.encode); -} - -export function decodeStaticCallResult(buffer: Uint8Array): StaticCallResult { - return Protobuf.decode(buffer, StaticCallResult.decode); -} diff --git a/packages/libs/proto/aspect/v2/string-array-data.ts b/packages/libs/proto/aspect/v2/string-array-data.ts index 98fc3d9..e05de59 100644 --- a/packages/libs/proto/aspect/v2/string-array-data.ts +++ b/packages/libs/proto/aspect/v2/string-array-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class StringArrayData { static encode(message: StringArrayData, writer: Writer): void { @@ -42,11 +42,3 @@ export class StringArrayData { this.data = data; } } - -export function encodeStringArrayData(message: StringArrayData): Uint8Array { - return Protobuf.encode(message, StringArrayData.encode); -} - -export function decodeStringArrayData(buffer: Uint8Array): StringArrayData { - return Protobuf.decode(buffer, StringArrayData.decode); -} diff --git a/packages/libs/proto/aspect/v2/string-data.ts b/packages/libs/proto/aspect/v2/string-data.ts index b5e8411..bce7799 100644 --- a/packages/libs/proto/aspect/v2/string-data.ts +++ b/packages/libs/proto/aspect/v2/string-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class StringData { static encode(message: StringData, writer: Writer): void { @@ -33,15 +33,7 @@ export class StringData { data: string; - constructor(data: string = '') { + constructor(data: string = "") { this.data = data; } } - -export function encodeStringData(message: StringData): Uint8Array { - return Protobuf.encode(message, StringData.encode); -} - -export function decodeStringData(buffer: Uint8Array): StringData { - return Protobuf.decode(buffer, StringData.decode); -} diff --git a/packages/libs/proto/aspect/v2/tx-verify-input.ts b/packages/libs/proto/aspect/v2/tx-verify-input.ts index c79614e..c85c252 100644 --- a/packages/libs/proto/aspect/v2/tx-verify-input.ts +++ b/packages/libs/proto/aspect/v2/tx-verify-input.ts @@ -1,11 +1,11 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; -import { BlockInput } from './block-input'; -import { NoFromTxInput } from './no-from-tx-input'; +import { Writer, Reader } from "as-proto/assembly"; +import { NoFromTxInput } from "./no-from-tx-input"; +import { BlockInput } from "./block-input"; export class TxVerifyInput { static encode(message: TxVerifyInput, writer: Writer): void { @@ -73,7 +73,7 @@ export class TxVerifyInput { tx: NoFromTxInput | null = null, block: BlockInput | null = null, validationData: Uint8Array = new Uint8Array(0), - callData: Uint8Array = new Uint8Array(0), + callData: Uint8Array = new Uint8Array(0) ) { this.tx = tx; this.block = block; @@ -81,11 +81,3 @@ export class TxVerifyInput { this.callData = callData; } } - -export function encodeTxVerifyInput(message: TxVerifyInput): Uint8Array { - return Protobuf.encode(message, TxVerifyInput.encode); -} - -export function decodeTxVerifyInput(buffer: Uint8Array): TxVerifyInput { - return Protobuf.decode(buffer, TxVerifyInput.decode); -} diff --git a/packages/libs/proto/aspect/v2/uint-data.ts b/packages/libs/proto/aspect/v2/uint-data.ts index a0f4313..d5d95a5 100644 --- a/packages/libs/proto/aspect/v2/uint-data.ts +++ b/packages/libs/proto/aspect/v2/uint-data.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class UintData { static encode(message: UintData, writer: Writer): void { @@ -37,11 +37,3 @@ export class UintData { this.data = data; } } - -export function encodeUintData(message: UintData): Uint8Array { - return Protobuf.encode(message, UintData.encode); -} - -export function decodeUintData(buffer: Uint8Array): UintData { - return Protobuf.decode(buffer, UintData.decode); -} diff --git a/packages/libs/proto/aspect/v2/with-from-tx-input.ts b/packages/libs/proto/aspect/v2/with-from-tx-input.ts index 29bb64a..27ce2f7 100644 --- a/packages/libs/proto/aspect/v2/with-from-tx-input.ts +++ b/packages/libs/proto/aspect/v2/with-from-tx-input.ts @@ -1,9 +1,9 @@ // Code generated by protoc-gen-as. DO NOT EDIT. // Versions: // protoc-gen-as v1.3.0 -// protoc v4.25.1 +// protoc v5.27.1 -import { Protobuf, Reader, Writer } from 'as-proto/assembly'; +import { Writer, Reader } from "as-proto/assembly"; export class WithFromTxInput { static encode(message: WithFromTxInput, writer: Writer): void { @@ -52,18 +52,10 @@ export class WithFromTxInput { constructor( hash: Uint8Array = new Uint8Array(0), to: Uint8Array = new Uint8Array(0), - from: Uint8Array = new Uint8Array(0), + from: Uint8Array = new Uint8Array(0) ) { this.hash = hash; this.to = to; this.from = from; } } - -export function encodeWithFromTxInput(message: WithFromTxInput): Uint8Array { - return Protobuf.encode(message, WithFromTxInput.encode); -} - -export function decodeWithFromTxInput(buffer: Uint8Array): WithFromTxInput { - return Protobuf.decode(buffer, WithFromTxInput.decode); -} diff --git a/packages/libs/proto/index.ts b/packages/libs/proto/index.ts index a9c26a1..c4046d6 100644 --- a/packages/libs/proto/index.ts +++ b/packages/libs/proto/index.ts @@ -27,6 +27,7 @@ export * from './aspect/v2/post-exec-message-input'; export * from './aspect/v2/post-tx-execute-input'; export * from './aspect/v2/post-contract-call-input'; export * from './aspect/v2/pre-contract-call-input'; +export * from './aspect/v2/init-input'; export * from './aspect/v2/pre-exec-message-input'; export * from './aspect/v2/pre-tx-execute-input'; export * from './aspect/v2/receipt-input'; @@ -38,3 +39,10 @@ export * from './aspect/v2/string-data'; export * from './aspect/v2/tx-verify-input'; export * from './aspect/v2/uint-data'; export * from './aspect/v2/with-from-tx-input'; +export * from './aspect/v2/g1'; +export * from './aspect/v2/g2'; +export * from './aspect/v2/bn256add-input'; +export * from './aspect/v2/bn256pairing-input'; +export * from './aspect/v2/bn256scalar-mul-input'; +export * from './aspect/v2/ec-recover-input'; +export * from './aspect/v2/blake2finput'; diff --git a/packages/libs/types/aspect-entry.ts b/packages/libs/types/aspect-entry.ts index 7e6bf61..b87e205 100644 --- a/packages/libs/types/aspect-entry.ts +++ b/packages/libs/types/aspect-entry.ts @@ -2,6 +2,7 @@ import { Protobuf } from 'as-proto/assembly'; import { IAspectOperation, IPostContractCallJP, IPostTxExecuteJP } from '.'; import { AString, AUint8Array, MessageUtil } from '../common'; import { + InitInput, OperationInput, PostContractCallInput, PostTxExecuteInput, @@ -23,7 +24,7 @@ export class EntryPoint { private aspectBase: IAspectBase | null = null; private aspectOperation: IAspectOperation | null = null; - constructor() {} + constructor() { } public setAspect(aspectBase: IAspectBase): void { this.aspectBase = aspectBase; @@ -75,6 +76,10 @@ export class EntryPoint { const outputPtr = new AUint8Array(output); return outputPtr.store(); } + if (method == PointCutType.INIT_METHOD) { + this.init(input.get()); + return 0; + } throw new Error('method ' + method + ' not found or not implemented'); } @@ -147,4 +152,20 @@ export class EntryPoint { const operation = this.aspectOperation as IAspectOperation; return operation.operation(input); } + + private init(rawInput: Uint8Array): void { + const input = Protobuf.decode(rawInput, InitInput.decode); + + if (this.aspectBase != null) { + this.aspectBase!.init(input); + return; + } + + if (this.aspectOperation != null) { + this.aspectOperation!.init(input); + return; + } + + throw new Error('aspect is not initialized'); + } } diff --git a/packages/libs/types/aspect-interface.ts b/packages/libs/types/aspect-interface.ts index 4891232..f5c211e 100644 --- a/packages/libs/types/aspect-interface.ts +++ b/packages/libs/types/aspect-interface.ts @@ -1,5 +1,6 @@ import { OperationInput, + InitInput, PostContractCallInput, PostTxExecuteInput, PreContractCallInput, @@ -15,6 +16,14 @@ export interface IAspectBase { * @returns true if the sender is the owner of the contract, otherwise false. */ isOwner(sender: Uint8Array): bool; + + /** + * init is the one-time initialization function for the aspect. It will be triggered + * when the aspect is first time deployed. + * + * @param input the input for the initialization. + */ + init(input: InitInput): void; } export interface ITransactionVerifier extends IAspectBase { @@ -97,23 +106,19 @@ export abstract class AspectBase abstract postTxExecute(input: PostTxExecuteInput): void; abstract verifyTx(input: TxVerifyInput): Uint8Array; + + abstract init(input: InitInput): void; } export class PointCutType { - static readonly ON_TX_RECEIVE_METHOD: string = 'onTxReceive'; - static readonly ON_BLOCK_INITIALIZE_METHOD: string = 'onBlockInitialize'; - static readonly VERIFY_TX: string = 'verifyTx'; static readonly PRE_TX_EXECUTE_METHOD: string = 'preTxExecute'; static readonly PRE_CONTRACT_CALL_METHOD: string = 'preContractCall'; static readonly POST_CONTRACT_CALL_METHOD: string = 'postContractCall'; static readonly POST_TX_EXECUTE_METHOD: string = 'postTxExecute'; - static readonly POST_TX_COMMIT: string = 'postTxCommit'; - static readonly ON_BLOCK_FINALIZE_METHOD: string = 'onBlockFinalize'; + static readonly INIT_METHOD: string = 'init'; static readonly OPERATION_METHOD: string = 'operation'; static readonly IS_OWNER_METHOD: string = 'isOwner'; - - static readonly FILTER_TX: string = 'filterTx'; } diff --git a/packages/testcases/README.md b/packages/testcases/README.md index 3fa27bc..cf13345 100644 --- a/packages/testcases/README.md +++ b/packages/testcases/README.md @@ -33,7 +33,7 @@ there will be three private Key when completed ## add money to an account ```shell - node scripts/transfer.cjs --skfile ./xxxx}.txt + node scripts/transfer.cjs --skfile ./xxxx.txt --from {sender_private_key} ``` diff --git a/packages/testcases/aspect/abnormal-dead-loop-aspect.ts b/packages/testcases/aspect/abnormal-dead-loop-aspect.ts new file mode 100644 index 0000000..74fcec5 --- /dev/null +++ b/packages/testcases/aspect/abnormal-dead-loop-aspect.ts @@ -0,0 +1,57 @@ +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +class DeadLoopAspect implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void { } + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + operation(input: OperationInput): Uint8Array { + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + for (; ;) { } + } + + postContractCall(_: PostContractCallInput): void { + } + + preTxExecute(_: PreTxExecuteInput): void { + } + + postTxExecute(_: PostTxExecuteInput): void { + } +} + +// 2.register aspect Instance +const aspect = new DeadLoopAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/abnormal-large-size-aspect-1m.ts b/packages/testcases/aspect/abnormal-large-size-aspect-1m.ts new file mode 100644 index 0000000..29a459a --- /dev/null +++ b/packages/testcases/aspect/abnormal-large-size-aspect-1m.ts @@ -0,0 +1,59 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +class LargeSizeAspect1M implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void { } + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + operation(input: OperationInput): Uint8Array { + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + const str = '1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_58_59_60_61_62_63_64_65_66_67_68_69_70_71_72_73_74_75_76_77_78_79_80_81_82_83_84_85_86_87_88_89_90_91_92_93_94_95_96_97_98_99_100_101_102_103_104_105_106_107_108_109_110_111_112_113_114_115_116_117_118_119_120_121_122_123_124_125_126_127_128_129_130_131_132_133_134_135_136_137_138_139_140_141_142_143_144_145_146_147_148_149_150_151_152_153_154_155_156_157_158_159_160_161_162_163_164_165_166_167_168_169_170_171_172_173_174_175_176_177_178_179_180_181_182_183_184_185_186_187_188_189_190_191_192_193_194_195_196_197_198_199_200_201_202_203_204_205_206_207_208_209_210_211_212_213_214_215_216_217_218_219_220_221_222_223_224_225_226_227_228_229_230_231_232_233_234_235_236_237_238_239_240_241_242_243_244_245_246_247_248_249_250_251_252_253_254_255_256_257_258_259_260_261_262_263_264_265_266_267_268_269_270_271_272_273_274_275_276_277_278_279_280_281_282_283_284_285_286_287_288_289_290_291_292_293_294_295_296_297_298_299_300_301_302_303_304_305_306_307_308_309_310_311_312_313_314_315_316_317_318_319_320_321_322_323_324_325_326_327_328_329_330_331_332_333_334_335_336_337_338_339_340_341_342_343_344_345_346_347_348_349_350_351_352_353_354_355_356_357_358_359_360_361_362_363_364_365_366_367_368_369_370_371_372_373_374_375_376_377_378_379_380_381_382_383_384_385_386_387_388_389_390_391_392_393_394_395_396_397_398_399_400_401_402_403_404_405_406_407_408_409_410_411_412_413_414_415_416_417_418_419_420_421_422_423_424_425_426_427_428_429_430_431_432_433_434_435_436_437_438_439_440_441_442_443_444_445_446_447_448_449_450_451_452_453_454_455_456_457_458_459_460_461_462_463_464_465_466_467_468_469_470_471_472_473_474_475_476_477_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494_495_496_497_498_499_500_501_502_503_504_505_506_507_508_509_510_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569_570_571_572_573_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598_599_600_601_602_603_604_605_606_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629_630_631_632_633_634_635_636_637_638_639_640_641_642_643_644_645_646_647_648_649_650_651_652_653_654_655_656_657_658_659_660_661_662_663_664_665_666_667_668_669_670_671_672_673_674_675_676_677_678_679_680_681_682_683_684_685_686_687_688_689_690_691_692_693_694_695_696_697_698_699_700_701_702_703_704_705_706_707_708_709_710_711_712_713_714_715_716_717_718_719_720_721_722_723_724_725_726_727_728_729_730_731_732_733_734_735_736_737_738_739_740_741_742_743_744_745_746_747_748_749_750_751_752_753_754_755_756_757_758_759_760_761_762_763_764_765_766_767_768_769_770_771_772_773_774_775_776_777_778_779_780_781_782_783_784_785_786_787_788_789_790_791_792_793_794_795_796_797_798_799_800_801_802_803_804_805_806_807_808_809_810_811_812_813_814_815_816_817_818_819_820_821_822_823_824_825_826_827_828_829_830_831_832_833_834_835_836_837_838_839_840_841_842_843_844_845_846_847_848_849_850_851_852_853_854_855_856_857_858_859_860_861_862_863_864_865_866_867_868_869_870_871_872_873_874_875_876_877_878_879_880_881_882_883_884_885_886_887_888_889_890_891_892_893_894_895_896_897_898_899_900_901_902_903_904_905_906_907_908_909_910_911_912_913_914_915_916_917_918_919_920_921_922_923_924_925_926_927_928_929_930_931_932_933_934_935_936_937_938_939_940_941_942_943_944_945_946_947_948_949_950_951_952_953_954_955_956_957_958_959_960_961_962_963_964_965_966_967_968_969_970_971_972_973_974_975_976_977_978_979_980_981_982_983_984_985_986_987_988_989_990_991_992_993_994_995_996_997_998_999_1000_1001_1002_1003_1004_1005_1006_1007_1008_1009_1010_1011_1012_1013_1014_1015_1016_1017_1018_1019_1020_1021_1022_1023_1024_1025_1026_1027_1028_1029_1030_1031_1032_1033_1034_1035_1036_1037_1038_1039_1040_1041_1042_1043_1044_1045_1046_1047_1048_1049_1050_1051_1052_1053_1054_1055_1056_1057_1058_1059_1060_1061_1062_1063_1064_1065_1066_1067_1068_1069_1070_1071_1072_1073_1074_1075_1076_1077_1078_1079_1080_1081_1082_1083_1084_1085_1086_1087_1088_1089_1090_1091_1092_1093_1094_1095_1096_1097_1098_1099_1100_1101_1102_1103_1104_1105_1106_1107_1108_1109_1110_1111_1112_1113_1114_1115_1116_1117_1118_1119_1120_1121_1122_1123_1124_1125_1126_1127_1128_1129_1130_1131_1132_1133_1134_1135_1136_1137_1138_1139_1140_1141_1142_1143_1144_1145_1146_1147_1148_1149_1150_1151_1152_1153_1154_1155_1156_1157_1158_1159_1160_1161_1162_1163_1164_1165_1166_1167_1168_1169_1170_1171_1172_1173_1174_1175_1176_1177_1178_1179_1180_1181_1182_1183_1184_1185_1186_1187_1188_1189_1190_1191_1192_1193_1194_1195_1196_1197_1198_1199_1200_1201_1202_1203_1204_1205_1206_1207_1208_1209_1210_1211_1212_1213_1214_1215_1216_1217_1218_1219_1220_1221_1222_1223_1224_1225_1226_1227_1228_1229_1230_1231_1232_1233_1234_1235_1236_1237_1238_1239_1240_1241_1242_1243_1244_1245_1246_1247_1248_1249_1250_1251_1252_1253_1254_1255_1256_1257_1258_1259_1260_1261_1262_1263_1264_1265_1266_1267_1268_1269_1270_1271_1272_1273_1274_1275_1276_1277_1278_1279_1280_1281_1282_1283_1284_1285_1286_1287_1288_1289_1290_1291_1292_1293_1294_1295_1296_1297_1298_1299_1300_1301_1302_1303_1304_1305_1306_1307_1308_1309_1310_1311_1312_1313_1314_1315_1316_1317_1318_1319_1320_1321_1322_1323_1324_1325_1326_1327_1328_1329_1330_1331_1332_1333_1334_1335_1336_1337_1338_1339_1340_1341_1342_1343_1344_1345_1346_1347_1348_1349_1350_1351_1352_1353_1354_1355_1356_1357_1358_1359_1360_1361_1362_1363_1364_1365_1366_1367_1368_1369_1370_1371_1372_1373_1374_1375_1376_1377_1378_1379_1380_1381_1382_1383_1384_1385_1386_1387_1388_1389_1390_1391_1392_1393_1394_1395_1396_1397_1398_1399_1400_1401_1402_1403_1404_1405_1406_1407_1408_1409_1410_1411_1412_1413_1414_1415_1416_1417_1418_1419_1420_1421_1422_1423_1424_1425_1426_1427_1428_1429_1430_1431_1432_1433_1434_1435_1436_1437_1438_1439_1440_1441_1442_1443_1444_1445_1446_1447_1448_1449_1450_1451_1452_1453_1454_1455_1456_1457_1458_1459_1460_1461_1462_1463_1464_1465_1466_1467_1468_1469_1470_1471_1472_1473_1474_1475_1476_1477_1478_1479_1480_1481_1482_1483_1484_1485_1486_1487_1488_1489_1490_1491_1492_1493_1494_1495_1496_1497_1498_1499_1500_1501_1502_1503_1504_1505_1506_1507_1508_1509_1510_1511_1512_1513_1514_1515_1516_1517_1518_1519_1520_1521_1522_1523_1524_1525_1526_1527_1528_1529_1530_1531_1532_1533_1534_1535_1536_1537_1538_1539_1540_1541_1542_1543_1544_1545_1546_1547_1548_1549_1550_1551_1552_1553_1554_1555_1556_1557_1558_1559_1560_1561_1562_1563_1564_1565_1566_1567_1568_1569_1570_1571_1572_1573_1574_1575_1576_1577_1578_1579_1580_1581_1582_1583_1584_1585_1586_1587_1588_1589_1590_1591_1592_1593_1594_1595_1596_1597_1598_1599_1600_1601_1602_1603_1604_1605_1606_1607_1608_1609_1610_1611_1612_1613_1614_1615_1616_1617_1618_1619_1620_1621_1622_1623_1624_1625_1626_1627_1628_1629_1630_1631_1632_1633_1634_1635_1636_1637_1638_1639_1640_1641_1642_1643_1644_1645_1646_1647_1648_1649_1650_1651_1652_1653_1654_1655_1656_1657_1658_1659_1660_1661_1662_1663_1664_1665_1666_1667_1668_1669_1670_1671_1672_1673_1674_1675_1676_1677_1678_1679_1680_1681_1682_1683_1684_1685_1686_1687_1688_1689_1690_1691_1692_1693_1694_1695_1696_1697_1698_1699_1700_1701_1702_1703_1704_1705_1706_1707_1708_1709_1710_1711_1712_1713_1714_1715_1716_1717_1718_1719_1720_1721_1722_1723_1724_1725_1726_1727_1728_1729_1730_1731_1732_1733_1734_1735_1736_1737_1738_1739_1740_1741_1742_1743_1744_1745_1746_1747_1748_1749_1750_1751_1752_1753_1754_1755_1756_1757_1758_1759_1760_1761_1762_1763_1764_1765_1766_1767_1768_1769_1770_1771_1772_1773_1774_1775_1776_1777_1778_1779_1780_1781_1782_1783_1784_1785_1786_1787_1788_1789_1790_1791_1792_1793_1794_1795_1796_1797_1798_1799_1800_1801_1802_1803_1804_1805_1806_1807_1808_1809_1810_1811_1812_1813_1814_1815_1816_1817_1818_1819_1820_1821_1822_1823_1824_1825_1826_1827_1828_1829_1830_1831_1832_1833_1834_1835_1836_1837_1838_1839_1840_1841_1842_1843_1844_1845_1846_1847_1848_1849_1850_1851_1852_1853_1854_1855_1856_1857_1858_1859_1860_1861_1862_1863_1864_1865_1866_1867_1868_1869_1870_1871_1872_1873_1874_1875_1876_1877_1878_1879_1880_1881_1882_1883_1884_1885_1886_1887_1888_1889_1890_1891_1892_1893_1894_1895_1896_1897_1898_1899_1900_1901_1902_1903_1904_1905_1906_1907_1908_1909_1910_1911_1912_1913_1914_1915_1916_1917_1918_1919_1920_1921_1922_1923_1924_1925_1926_1927_1928_1929_1930_1931_1932_1933_1934_1935_1936_1937_1938_1939_1940_1941_1942_1943_1944_1945_1946_1947_1948_1949_1950_1951_1952_1953_1954_1955_1956_1957_1958_1959_1960_1961_1962_1963_1964_1965_1966_1967_1968_1969_1970_1971_1972_1973_1974_1975_1976_1977_1978_1979_1980_1981_1982_1983_1984_1985_1986_1987_1988_1989_1990_1991_1992_1993_1994_1995_1996_1997_1998_1999_2000_2001_2002_2003_2004_2005_2006_2007_2008_2009_2010_2011_2012_2013_2014_2015_2016_2017_2018_2019_2020_2021_2022_2023_2024_2025_2026_2027_2028_2029_2030_2031_2032_2033_2034_2035_2036_2037_2038_2039_2040_2041_2042_2043_2044_2045_2046_2047_2048_2049_2050_2051_2052_2053_2054_2055_2056_2057_2058_2059_2060_2061_2062_2063_2064_2065_2066_2067_2068_2069_2070_2071_2072_2073_2074_2075_2076_2077_2078_2079_2080_2081_2082_2083_2084_2085_2086_2087_2088_2089_2090_2091_2092_2093_2094_2095_2096_2097_2098_2099_2100_2101_2102_2103_2104_2105_2106_2107_2108_2109_2110_2111_2112_2113_2114_2115_2116_2117_2118_2119_2120_2121_2122_2123_2124_2125_2126_2127_2128_2129_2130_2131_2132_2133_2134_2135_2136_2137_2138_2139_2140_2141_2142_2143_2144_2145_2146_2147_2148_2149_2150_2151_2152_2153_2154_2155_2156_2157_2158_2159_2160_2161_2162_2163_2164_2165_2166_2167_2168_2169_2170_2171_2172_2173_2174_2175_2176_2177_2178_2179_2180_2181_2182_2183_2184_2185_2186_2187_2188_2189_2190_2191_2192_2193_2194_2195_2196_2197_2198_2199_2200_2201_2202_2203_2204_2205_2206_2207_2208_2209_2210_2211_2212_2213_2214_2215_2216_2217_2218_2219_2220_2221_2222_2223_2224_2225_2226_2227_2228_2229_2230_2231_2232_2233_2234_2235_2236_2237_2238_2239_2240_2241_2242_2243_2244_2245_2246_2247_2248_2249_2250_2251_2252_2253_2254_2255_2256_2257_2258_2259_2260_2261_2262_2263_2264_2265_2266_2267_2268_2269_2270_2271_2272_2273_2274_2275_2276_2277_2278_2279_2280_2281_2282_2283_2284_2285_2286_2287_2288_2289_2290_2291_2292_2293_2294_2295_2296_2297_2298_2299_2300_2301_2302_2303_2304_2305_2306_2307_2308_2309_2310_2311_2312_2313_2314_2315_2316_2317_2318_2319_2320_2321_2322_2323_2324_2325_2326_2327_2328_2329_2330_2331_2332_2333_2334_2335_2336_2337_2338_2339_2340_2341_2342_2343_2344_2345_2346_2347_2348_2349_2350_2351_2352_2353_2354_2355_2356_2357_2358_2359_2360_2361_2362_2363_2364_2365_2366_2367_2368_2369_2370_2371_2372_2373_2374_2375_2376_2377_2378_2379_2380_2381_2382_2383_2384_2385_2386_2387_2388_2389_2390_2391_2392_2393_2394_2395_2396_2397_2398_2399_2400_2401_2402_2403_2404_2405_2406_2407_2408_2409_2410_2411_2412_2413_2414_2415_2416_2417_2418_2419_2420_2421_2422_2423_2424_2425_2426_2427_2428_2429_2430_2431_2432_2433_2434_2435_2436_2437_2438_2439_2440_2441_2442_2443_2444_2445_2446_2447_2448_2449_2450_2451_2452_2453_2454_2455_2456_2457_2458_2459_2460_2461_2462_2463_2464_2465_2466_2467_2468_2469_2470_2471_2472_2473_2474_2475_2476_2477_2478_2479_2480_2481_2482_2483_2484_2485_2486_2487_2488_2489_2490_2491_2492_2493_2494_2495_2496_2497_2498_2499_2500_2501_2502_2503_2504_2505_2506_2507_2508_2509_2510_2511_2512_2513_2514_2515_2516_2517_2518_2519_2520_2521_2522_2523_2524_2525_2526_2527_2528_2529_2530_2531_2532_2533_2534_2535_2536_2537_2538_2539_2540_2541_2542_2543_2544_2545_2546_2547_2548_2549_2550_2551_2552_2553_2554_2555_2556_2557_2558_2559_2560_2561_2562_2563_2564_2565_2566_2567_2568_2569_2570_2571_2572_2573_2574_2575_2576_2577_2578_2579_2580_2581_2582_2583_2584_2585_2586_2587_2588_2589_2590_2591_2592_2593_2594_2595_2596_2597_2598_2599_2600_2601_2602_2603_2604_2605_2606_2607_2608_2609_2610_2611_2612_2613_2614_2615_2616_2617_2618_2619_2620_2621_2622_2623_2624_2625_2626_2627_2628_2629_2630_2631_2632_2633_2634_2635_2636_2637_2638_2639_2640_2641_2642_2643_2644_2645_2646_2647_2648_2649_2650_2651_2652_2653_2654_2655_2656_2657_2658_2659_2660_2661_2662_2663_2664_2665_2666_2667_2668_2669_2670_2671_2672_2673_2674_2675_2676_2677_2678_2679_2680_2681_2682_2683_2684_2685_2686_2687_2688_2689_2690_2691_2692_2693_2694_2695_2696_2697_2698_2699_2700_2701_2702_2703_2704_2705_2706_2707_2708_2709_2710_2711_2712_2713_2714_2715_2716_2717_2718_2719_2720_2721_2722_2723_2724_2725_2726_2727_2728_2729_2730_2731_2732_2733_2734_2735_2736_2737_2738_2739_2740_2741_2742_2743_2744_2745_2746_2747_2748_2749_2750_2751_2752_2753_2754_2755_2756_2757_2758_2759_2760_2761_2762_2763_2764_2765_2766_2767_2768_2769_2770_2771_2772_2773_2774_2775_2776_2777_2778_2779_2780_2781_2782_2783_2784_2785_2786_2787_2788_2789_2790_2791_2792_2793_2794_2795_2796_2797_2798_2799_2800_2801_2802_2803_2804_2805_2806_2807_2808_2809_2810_2811_2812_2813_2814_2815_2816_2817_2818_2819_2820_2821_2822_2823_2824_2825_2826_2827_2828_2829_2830_2831_2832_2833_2834_2835_2836_2837_2838_2839_2840_2841_2842_2843_2844_2845_2846_2847_2848_2849_2850_2851_2852_2853_2854_2855_2856_2857_2858_2859_2860_2861_2862_2863_2864_2865_2866_2867_2868_2869_2870_2871_2872_2873_2874_2875_2876_2877_2878_2879_2880_2881_2882_2883_2884_2885_2886_2887_2888_2889_2890_2891_2892_2893_2894_2895_2896_2897_2898_2899_2900_2901_2902_2903_2904_2905_2906_2907_2908_2909_2910_2911_2912_2913_2914_2915_2916_2917_2918_2919_2920_2921_2922_2923_2924_2925_2926_2927_2928_2929_2930_2931_2932_2933_2934_2935_2936_2937_2938_2939_2940_2941_2942_2943_2944_2945_2946_2947_2948_2949_2950_2951_2952_2953_2954_2955_2956_2957_2958_2959_2960_2961_2962_2963_2964_2965_2966_2967_2968_2969_2970_2971_2972_2973_2974_2975_2976_2977_2978_2979_2980_2981_2982_2983_2984_2985_2986_2987_2988_2989_2990_2991_2992_2993_2994_2995_2996_2997_2998_2999_3000_3001_3002_3003_3004_3005_3006_3007_3008_3009_3010_3011_3012_3013_3014_3015_3016_3017_3018_3019_3020_3021_3022_3023_3024_3025_3026_3027_3028_3029_3030_3031_3032_3033_3034_3035_3036_3037_3038_3039_3040_3041_3042_3043_3044_3045_3046_3047_3048_3049_3050_3051_3052_3053_3054_3055_3056_3057_3058_3059_3060_3061_3062_3063_3064_3065_3066_3067_3068_3069_3070_3071_3072_3073_3074_3075_3076_3077_3078_3079_3080_3081_3082_3083_3084_3085_3086_3087_3088_3089_3090_3091_3092_3093_3094_3095_3096_3097_3098_3099_3100_3101_3102_3103_3104_3105_3106_3107_3108_3109_3110_3111_3112_3113_3114_3115_3116_3117_3118_3119_3120_3121_3122_3123_3124_3125_3126_3127_3128_3129_3130_3131_3132_3133_3134_3135_3136_3137_3138_3139_3140_3141_3142_3143_3144_3145_3146_3147_3148_3149_3150_3151_3152_3153_3154_3155_3156_3157_3158_3159_3160_3161_3162_3163_3164_3165_3166_3167_3168_3169_3170_3171_3172_3173_3174_3175_3176_3177_3178_3179_3180_3181_3182_3183_3184_3185_3186_3187_3188_3189_3190_3191_3192_3193_3194_3195_3196_3197_3198_3199_3200_3201_3202_3203_3204_3205_3206_3207_3208_3209_3210_3211_3212_3213_3214_3215_3216_3217_3218_3219_3220_3221_3222_3223_3224_3225_3226_3227_3228_3229_3230_3231_3232_3233_3234_3235_3236_3237_3238_3239_3240_3241_3242_3243_3244_3245_3246_3247_3248_3249_3250_3251_3252_3253_3254_3255_3256_3257_3258_3259_3260_3261_3262_3263_3264_3265_3266_3267_3268_3269_3270_3271_3272_3273_3274_3275_3276_3277_3278_3279_3280_3281_3282_3283_3284_3285_3286_3287_3288_3289_3290_3291_3292_3293_3294_3295_3296_3297_3298_3299_3300_3301_3302_3303_3304_3305_3306_3307_3308_3309_3310_3311_3312_3313_3314_3315_3316_3317_3318_3319_3320_3321_3322_3323_3324_3325_3326_3327_3328_3329_3330_3331_3332_3333_3334_3335_3336_3337_3338_3339_3340_3341_3342_3343_3344_3345_3346_3347_3348_3349_3350_3351_3352_3353_3354_3355_3356_3357_3358_3359_3360_3361_3362_3363_3364_3365_3366_3367_3368_3369_3370_3371_3372_3373_3374_3375_3376_3377_3378_3379_3380_3381_3382_3383_3384_3385_3386_3387_3388_3389_3390_3391_3392_3393_3394_3395_3396_3397_3398_3399_3400_3401_3402_3403_3404_3405_3406_3407_3408_3409_3410_3411_3412_3413_3414_3415_3416_3417_3418_3419_3420_3421_3422_3423_3424_3425_3426_3427_3428_3429_3430_3431_3432_3433_3434_3435_3436_3437_3438_3439_3440_3441_3442_3443_3444_3445_3446_3447_3448_3449_3450_3451_3452_3453_3454_3455_3456_3457_3458_3459_3460_3461_3462_3463_3464_3465_3466_3467_3468_3469_3470_3471_3472_3473_3474_3475_3476_3477_3478_3479_3480_3481_3482_3483_3484_3485_3486_3487_3488_3489_3490_3491_3492_3493_3494_3495_3496_3497_3498_3499_3500_3501_3502_3503_3504_3505_3506_3507_3508_3509_3510_3511_3512_3513_3514_3515_3516_3517_3518_3519_3520_3521_3522_3523_3524_3525_3526_3527_3528_3529_3530_3531_3532_3533_3534_3535_3536_3537_3538_3539_3540_3541_3542_3543_3544_3545_3546_3547_3548_3549_3550_3551_3552_3553_3554_3555_3556_3557_3558_3559_3560_3561_3562_3563_3564_3565_3566_3567_3568_3569_3570_3571_3572_3573_3574_3575_3576_3577_3578_3579_3580_3581_3582_3583_3584_3585_3586_3587_3588_3589_3590_3591_3592_3593_3594_3595_3596_3597_3598_3599_3600_3601_3602_3603_3604_3605_3606_3607_3608_3609_3610_3611_3612_3613_3614_3615_3616_3617_3618_3619_3620_3621_3622_3623_3624_3625_3626_3627_3628_3629_3630_3631_3632_3633_3634_3635_3636_3637_3638_3639_3640_3641_3642_3643_3644_3645_3646_3647_3648_3649_3650_3651_3652_3653_3654_3655_3656_3657_3658_3659_3660_3661_3662_3663_3664_3665_3666_3667_3668_3669_3670_3671_3672_3673_3674_3675_3676_3677_3678_3679_3680_3681_3682_3683_3684_3685_3686_3687_3688_3689_3690_3691_3692_3693_3694_3695_3696_3697_3698_3699_3700_3701_3702_3703_3704_3705_3706_3707_3708_3709_3710_3711_3712_3713_3714_3715_3716_3717_3718_3719_3720_3721_3722_3723_3724_3725_3726_3727_3728_3729_3730_3731_3732_3733_3734_3735_3736_3737_3738_3739_3740_3741_3742_3743_3744_3745_3746_3747_3748_3749_3750_3751_3752_3753_3754_3755_3756_3757_3758_3759_3760_3761_3762_3763_3764_3765_3766_3767_3768_3769_3770_3771_3772_3773_3774_3775_3776_3777_3778_3779_3780_3781_3782_3783_3784_3785_3786_3787_3788_3789_3790_3791_3792_3793_3794_3795_3796_3797_3798_3799_3800_3801_3802_3803_3804_3805_3806_3807_3808_3809_3810_3811_3812_3813_3814_3815_3816_3817_3818_3819_3820_3821_3822_3823_3824_3825_3826_3827_3828_3829_3830_3831_3832_3833_3834_3835_3836_3837_3838_3839_3840_3841_3842_3843_3844_3845_3846_3847_3848_3849_3850_3851_3852_3853_3854_3855_3856_3857_3858_3859_3860_3861_3862_3863_3864_3865_3866_3867_3868_3869_3870_3871_3872_3873_3874_3875_3876_3877_3878_3879_3880_3881_3882_3883_3884_3885_3886_3887_3888_3889_3890_3891_3892_3893_3894_3895_3896_3897_3898_3899_3900_3901_3902_3903_3904_3905_3906_3907_3908_3909_3910_3911_3912_3913_3914_3915_3916_3917_3918_3919_3920_3921_3922_3923_3924_3925_3926_3927_3928_3929_3930_3931_3932_3933_3934_3935_3936_3937_3938_3939_3940_3941_3942_3943_3944_3945_3946_3947_3948_3949_3950_3951_3952_3953_3954_3955_3956_3957_3958_3959_3960_3961_3962_3963_3964_3965_3966_3967_3968_3969_3970_3971_3972_3973_3974_3975_3976_3977_3978_3979_3980_3981_3982_3983_3984_3985_3986_3987_3988_3989_3990_3991_3992_3993_3994_3995_3996_3997_3998_3999_4000_4001_4002_4003_4004_4005_4006_4007_4008_4009_4010_4011_4012_4013_4014_4015_4016_4017_4018_4019_4020_4021_4022_4023_4024_4025_4026_4027_4028_4029_4030_4031_4032_4033_4034_4035_4036_4037_4038_4039_4040_4041_4042_4043_4044_4045_4046_4047_4048_4049_4050_4051_4052_4053_4054_4055_4056_4057_4058_4059_4060_4061_4062_4063_4064_4065_4066_4067_4068_4069_4070_4071_4072_4073_4074_4075_4076_4077_4078_4079_4080_4081_4082_4083_4084_4085_4086_4087_4088_4089_4090_4091_4092_4093_4094_4095_4096_4097_4098_4099_4100_4101_4102_4103_4104_4105_4106_4107_4108_4109_4110_4111_4112_4113_4114_4115_4116_4117_4118_4119_4120_4121_4122_4123_4124_4125_4126_4127_4128_4129_4130_4131_4132_4133_4134_4135_4136_4137_4138_4139_4140_4141_4142_4143_4144_4145_4146_4147_4148_4149_4150_4151_4152_4153_4154_4155_4156_4157_4158_4159_4160_4161_4162_4163_4164_4165_4166_4167_4168_4169_4170_4171_4172_4173_4174_4175_4176_4177_4178_4179_4180_4181_4182_4183_4184_4185_4186_4187_4188_4189_4190_4191_4192_4193_4194_4195_4196_4197_4198_4199_4200_4201_4202_4203_4204_4205_4206_4207_4208_4209_4210_4211_4212_4213_4214_4215_4216_4217_4218_4219_4220_4221_4222_4223_4224_4225_4226_4227_4228_4229_4230_4231_4232_4233_4234_4235_4236_4237_4238_4239_4240_4241_4242_4243_4244_4245_4246_4247_4248_4249_4250_4251_4252_4253_4254_4255_4256_4257_4258_4259_4260_4261_4262_4263_4264_4265_4266_4267_4268_4269_4270_4271_4272_4273_4274_4275_4276_4277_4278_4279_4280_4281_4282_4283_4284_4285_4286_4287_4288_4289_4290_4291_4292_4293_4294_4295_4296_4297_4298_4299_4300_4301_4302_4303_4304_4305_4306_4307_4308_4309_4310_4311_4312_4313_4314_4315_4316_4317_4318_4319_4320_4321_4322_4323_4324_4325_4326_4327_4328_4329_4330_4331_4332_4333_4334_4335_4336_4337_4338_4339_4340_4341_4342_4343_4344_4345_4346_4347_4348_4349_4350_4351_4352_4353_4354_4355_4356_4357_4358_4359_4360_4361_4362_4363_4364_4365_4366_4367_4368_4369_4370_4371_4372_4373_4374_4375_4376_4377_4378_4379_4380_4381_4382_4383_4384_4385_4386_4387_4388_4389_4390_4391_4392_4393_4394_4395_4396_4397_4398_4399_4400_4401_4402_4403_4404_4405_4406_4407_4408_4409_4410_4411_4412_4413_4414_4415_4416_4417_4418_4419_4420_4421_4422_4423_4424_4425_4426_4427_4428_4429_4430_4431_4432_4433_4434_4435_4436_4437_4438_4439_4440_4441_4442_4443_4444_4445_4446_4447_4448_4449_4450_4451_4452_4453_4454_4455_4456_4457_4458_4459_4460_4461_4462_4463_4464_4465_4466_4467_4468_4469_4470_4471_4472_4473_4474_4475_4476_4477_4478_4479_4480_4481_4482_4483_4484_4485_4486_4487_4488_4489_4490_4491_4492_4493_4494_4495_4496_4497_4498_4499_4500_4501_4502_4503_4504_4505_4506_4507_4508_4509_4510_4511_4512_4513_4514_4515_4516_4517_4518_4519_4520_4521_4522_4523_4524_4525_4526_4527_4528_4529_4530_4531_4532_4533_4534_4535_4536_4537_4538_4539_4540_4541_4542_4543_4544_4545_4546_4547_4548_4549_4550_4551_4552_4553_4554_4555_4556_4557_4558_4559_4560_4561_4562_4563_4564_4565_4566_4567_4568_4569_4570_4571_4572_4573_4574_4575_4576_4577_4578_4579_4580_4581_4582_4583_4584_4585_4586_4587_4588_4589_4590_4591_4592_4593_4594_4595_4596_4597_4598_4599_4600_4601_4602_4603_4604_4605_4606_4607_4608_4609_4610_4611_4612_4613_4614_4615_4616_4617_4618_4619_4620_4621_4622_4623_4624_4625_4626_4627_4628_4629_4630_4631_4632_4633_4634_4635_4636_4637_4638_4639_4640_4641_4642_4643_4644_4645_4646_4647_4648_4649_4650_4651_4652_4653_4654_4655_4656_4657_4658_4659_4660_4661_4662_4663_4664_4665_4666_4667_4668_4669_4670_4671_4672_4673_4674_4675_4676_4677_4678_4679_4680_4681_4682_4683_4684_4685_4686_4687_4688_4689_4690_4691_4692_4693_4694_4695_4696_4697_4698_4699_4700_4701_4702_4703_4704_4705_4706_4707_4708_4709_4710_4711_4712_4713_4714_4715_4716_4717_4718_4719_4720_4721_4722_4723_4724_4725_4726_4727_4728_4729_4730_4731_4732_4733_4734_4735_4736_4737_4738_4739_4740_4741_4742_4743_4744_4745_4746_4747_4748_4749_4750_4751_4752_4753_4754_4755_4756_4757_4758_4759_4760_4761_4762_4763_4764_4765_4766_4767_4768_4769_4770_4771_4772_4773_4774_4775_4776_4777_4778_4779_4780_4781_4782_4783_4784_4785_4786_4787_4788_4789_4790_4791_4792_4793_4794_4795_4796_4797_4798_4799_4800_4801_4802_4803_4804_4805_4806_4807_4808_4809_4810_4811_4812_4813_4814_4815_4816_4817_4818_4819_4820_4821_4822_4823_4824_4825_4826_4827_4828_4829_4830_4831_4832_4833_4834_4835_4836_4837_4838_4839_4840_4841_4842_4843_4844_4845_4846_4847_4848_4849_4850_4851_4852_4853_4854_4855_4856_4857_4858_4859_4860_4861_4862_4863_4864_4865_4866_4867_4868_4869_4870_4871_4872_4873_4874_4875_4876_4877_4878_4879_4880_4881_4882_4883_4884_4885_4886_4887_4888_4889_4890_4891_4892_4893_4894_4895_4896_4897_4898_4899_4900_4901_4902_4903_4904_4905_4906_4907_4908_4909_4910_4911_4912_4913_4914_4915_4916_4917_4918_4919_4920_4921_4922_4923_4924_4925_4926_4927_4928_4929_4930_4931_4932_4933_4934_4935_4936_4937_4938_4939_4940_4941_4942_4943_4944_4945_4946_4947_4948_4949_4950_4951_4952_4953_4954_4955_4956_4957_4958_4959_4960_4961_4962_4963_4964_4965_4966_4967_4968_4969_4970_4971_4972_4973_4974_4975_4976_4977_4978_4979_4980_4981_4982_4983_4984_4985_4986_4987_4988_4989_4990_4991_4992_4993_4994_4995_4996_4997_4998_4999_5000_5001_5002_5003_5004_5005_5006_5007_5008_5009_5010_5011_5012_5013_5014_5015_5016_5017_5018_5019_5020_5021_5022_5023_5024_5025_5026_5027_5028_5029_5030_5031_5032_5033_5034_5035_5036_5037_5038_5039_5040_5041_5042_5043_5044_5045_5046_5047_5048_5049_5050_5051_5052_5053_5054_5055_5056_5057_5058_5059_5060_5061_5062_5063_5064_5065_5066_5067_5068_5069_5070_5071_5072_5073_5074_5075_5076_5077_5078_5079_5080_5081_5082_5083_5084_5085_5086_5087_5088_5089_5090_5091_5092_5093_5094_5095_5096_5097_5098_5099_5100_5101_5102_5103_5104_5105_5106_5107_5108_5109_5110_5111_5112_5113_5114_5115_5116_5117_5118_5119_5120_5121_5122_5123_5124_5125_5126_5127_5128_5129_5130_5131_5132_5133_5134_5135_5136_5137_5138_5139_5140_5141_5142_5143_5144_5145_5146_5147_5148_5149_5150_5151_5152_5153_5154_5155_5156_5157_5158_5159_5160_5161_5162_5163_5164_5165_5166_5167_5168_5169_5170_5171_5172_5173_5174_5175_5176_5177_5178_5179_5180_5181_5182_5183_5184_5185_5186_5187_5188_5189_5190_5191_5192_5193_5194_5195_5196_5197_5198_5199_5200_5201_5202_5203_5204_5205_5206_5207_5208_5209_5210_5211_5212_5213_5214_5215_5216_5217_5218_5219_5220_5221_5222_5223_5224_5225_5226_5227_5228_5229_5230_5231_5232_5233_5234_5235_5236_5237_5238_5239_5240_5241_5242_5243_5244_5245_5246_5247_5248_5249_5250_5251_5252_5253_5254_5255_5256_5257_5258_5259_5260_5261_5262_5263_5264_5265_5266_5267_5268_5269_5270_5271_5272_5273_5274_5275_5276_5277_5278_5279_5280_5281_5282_5283_5284_5285_5286_5287_5288_5289_5290_5291_5292_5293_5294_5295_5296_5297_5298_5299_5300_5301_5302_5303_5304_5305_5306_5307_5308_5309_5310_5311_5312_5313_5314_5315_5316_5317_5318_5319_5320_5321_5322_5323_5324_5325_5326_5327_5328_5329_5330_5331_5332_5333_5334_5335_5336_5337_5338_5339_5340_5341_5342_5343_5344_5345_5346_5347_5348_5349_5350_5351_5352_5353_5354_5355_5356_5357_5358_5359_5360_5361_5362_5363_5364_5365_5366_5367_5368_5369_5370_5371_5372_5373_5374_5375_5376_5377_5378_5379_5380_5381_5382_5383_5384_5385_5386_5387_5388_5389_5390_5391_5392_5393_5394_5395_5396_5397_5398_5399_5400_5401_5402_5403_5404_5405_5406_5407_5408_5409_5410_5411_5412_5413_5414_5415_5416_5417_5418_5419_5420_5421_5422_5423_5424_5425_5426_5427_5428_5429_5430_5431_5432_5433_5434_5435_5436_5437_5438_5439_5440_5441_5442_5443_5444_5445_5446_5447_5448_5449_5450_5451_5452_5453_5454_5455_5456_5457_5458_5459_5460_5461_5462_5463_5464_5465_5466_5467_5468_5469_5470_5471_5472_5473_5474_5475_5476_5477_5478_5479_5480_5481_5482_5483_5484_5485_5486_5487_5488_5489_5490_5491_5492_5493_5494_5495_5496_5497_5498_5499_5500_5501_5502_5503_5504_5505_5506_5507_5508_5509_5510_5511_5512_5513_5514_5515_5516_5517_5518_5519_5520_5521_5522_5523_5524_5525_5526_5527_5528_5529_5530_5531_5532_5533_5534_5535_5536_5537_5538_5539_5540_5541_5542_5543_5544_5545_5546_5547_5548_5549_5550_5551_5552_5553_5554_5555_5556_5557_5558_5559_5560_5561_5562_5563_5564_5565_5566_5567_5568_5569_5570_5571_5572_5573_5574_5575_5576_5577_5578_5579_5580_5581_5582_5583_5584_5585_5586_5587_5588_5589_5590_5591_5592_5593_5594_5595_5596_5597_5598_5599_5600_5601_5602_5603_5604_5605_5606_5607_5608_5609_5610_5611_5612_5613_5614_5615_5616_5617_5618_5619_5620_5621_5622_5623_5624_5625_5626_5627_5628_5629_5630_5631_5632_5633_5634_5635_5636_5637_5638_5639_5640_5641_5642_5643_5644_5645_5646_5647_5648_5649_5650_5651_5652_5653_5654_5655_5656_5657_5658_5659_5660_5661_5662_5663_5664_5665_5666_5667_5668_5669_5670_5671_5672_5673_5674_5675_5676_5677_5678_5679_5680_5681_5682_5683_5684_5685_5686_5687_5688_5689_5690_5691_5692_5693_5694_5695_5696_5697_5698_5699_5700_5701_5702_5703_5704_5705_5706_5707_5708_5709_5710_5711_5712_5713_5714_5715_5716_5717_5718_5719_5720_5721_5722_5723_5724_5725_5726_5727_5728_5729_5730_5731_5732_5733_5734_5735_5736_5737_5738_5739_5740_5741_5742_5743_5744_5745_5746_5747_5748_5749_5750_5751_5752_5753_5754_5755_5756_5757_5758_5759_5760_5761_5762_5763_5764_5765_5766_5767_5768_5769_5770_5771_5772_5773_5774_5775_5776_5777_5778_5779_5780_5781_5782_5783_5784_5785_5786_5787_5788_5789_5790_5791_5792_5793_5794_5795_5796_5797_5798_5799_5800_5801_5802_5803_5804_5805_5806_5807_5808_5809_5810_5811_5812_5813_5814_5815_5816_5817_5818_5819_5820_5821_5822_5823_5824_5825_5826_5827_5828_5829_5830_5831_5832_5833_5834_5835_5836_5837_5838_5839_5840_5841_5842_5843_5844_5845_5846_5847_5848_5849_5850_5851_5852_5853_5854_5855_5856_5857_5858_5859_5860_5861_5862_5863_5864_5865_5866_5867_5868_5869_5870_5871_5872_5873_5874_5875_5876_5877_5878_5879_5880_5881_5882_5883_5884_5885_5886_5887_5888_5889_5890_5891_5892_5893_5894_5895_5896_5897_5898_5899_5900_5901_5902_5903_5904_5905_5906_5907_5908_5909_5910_5911_5912_5913_5914_5915_5916_5917_5918_5919_5920_5921_5922_5923_5924_5925_5926_5927_5928_5929_5930_5931_5932_5933_5934_5935_5936_5937_5938_5939_5940_5941_5942_5943_5944_5945_5946_5947_5948_5949_5950_5951_5952_5953_5954_5955_5956_5957_5958_5959_5960_5961_5962_5963_5964_5965_5966_5967_5968_5969_5970_5971_5972_5973_5974_5975_5976_5977_5978_5979_5980_5981_5982_5983_5984_5985_5986_5987_5988_5989_5990_5991_5992_5993_5994_5995_5996_5997_5998_5999_6000_6001_6002_6003_6004_6005_6006_6007_6008_6009_6010_6011_6012_6013_6014_6015_6016_6017_6018_6019_6020_6021_6022_6023_6024_6025_6026_6027_6028_6029_6030_6031_6032_6033_6034_6035_6036_6037_6038_6039_6040_6041_6042_6043_6044_6045_6046_6047_6048_6049_6050_6051_6052_6053_6054_6055_6056_6057_6058_6059_6060_6061_6062_6063_6064_6065_6066_6067_6068_6069_6070_6071_6072_6073_6074_6075_6076_6077_6078_6079_6080_6081_6082_6083_6084_6085_6086_6087_6088_6089_6090_6091_6092_6093_6094_6095_6096_6097_6098_6099_6100_6101_6102_6103_6104_6105_6106_6107_6108_6109_6110_6111_6112_6113_6114_6115_6116_6117_6118_6119_6120_6121_6122_6123_6124_6125_6126_6127_6128_6129_6130_6131_6132_6133_6134_6135_6136_6137_6138_6139_6140_6141_6142_6143_6144_6145_6146_6147_6148_6149_6150_6151_6152_6153_6154_6155_6156_6157_6158_6159_6160_6161_6162_6163_6164_6165_6166_6167_6168_6169_6170_6171_6172_6173_6174_6175_6176_6177_6178_6179_6180_6181_6182_6183_6184_6185_6186_6187_6188_6189_6190_6191_6192_6193_6194_6195_6196_6197_6198_6199_6200_6201_6202_6203_6204_6205_6206_6207_6208_6209_6210_6211_6212_6213_6214_6215_6216_6217_6218_6219_6220_6221_6222_6223_6224_6225_6226_6227_6228_6229_6230_6231_6232_6233_6234_6235_6236_6237_6238_6239_6240_6241_6242_6243_6244_6245_6246_6247_6248_6249_6250_6251_6252_6253_6254_6255_6256_6257_6258_6259_6260_6261_6262_6263_6264_6265_6266_6267_6268_6269_6270_6271_6272_6273_6274_6275_6276_6277_6278_6279_6280_6281_6282_6283_6284_6285_6286_6287_6288_6289_6290_6291_6292_6293_6294_6295_6296_6297_6298_6299_6300_6301_6302_6303_6304_6305_6306_6307_6308_6309_6310_6311_6312_6313_6314_6315_6316_6317_6318_6319_6320_6321_6322_6323_6324_6325_6326_6327_6328_6329_6330_6331_6332_6333_6334_6335_6336_6337_6338_6339_6340_6341_6342_6343_6344_6345_6346_6347_6348_6349_6350_6351_6352_6353_6354_6355_6356_6357_6358_6359_6360_6361_6362_6363_6364_6365_6366_6367_6368_6369_6370_6371_6372_6373_6374_6375_6376_6377_6378_6379_6380_6381_6382_6383_6384_6385_6386_6387_6388_6389_6390_6391_6392_6393_6394_6395_6396_6397_6398_6399_6400_6401_6402_6403_6404_6405_6406_6407_6408_6409_6410_6411_6412_6413_6414_6415_6416_6417_6418_6419_6420_6421_6422_6423_6424_6425_6426_6427_6428_6429_6430_6431_6432_6433_6434_6435_6436_6437_6438_6439_6440_6441_6442_6443_6444_6445_6446_6447_6448_6449_6450_6451_6452_6453_6454_6455_6456_6457_6458_6459_6460_6461_6462_6463_6464_6465_6466_6467_6468_6469_6470_6471_6472_6473_6474_6475_6476_6477_6478_6479_6480_6481_6482_6483_6484_6485_6486_6487_6488_6489_6490_6491_6492_6493_6494_6495_6496_6497_6498_6499_6500_6501_6502_6503_6504_6505_6506_6507_6508_6509_6510_6511_6512_6513_6514_6515_6516_6517_6518_6519_6520_6521_6522_6523_6524_6525_6526_6527_6528_6529_6530_6531_6532_6533_6534_6535_6536_6537_6538_6539_6540_6541_6542_6543_6544_6545_6546_6547_6548_6549_6550_6551_6552_6553_6554_6555_6556_6557_6558_6559_6560_6561_6562_6563_6564_6565_6566_6567_6568_6569_6570_6571_6572_6573_6574_6575_6576_6577_6578_6579_6580_6581_6582_6583_6584_6585_6586_6587_6588_6589_6590_6591_6592_6593_6594_6595_6596_6597_6598_6599_6600_6601_6602_6603_6604_6605_6606_6607_6608_6609_6610_6611_6612_6613_6614_6615_6616_6617_6618_6619_6620_6621_6622_6623_6624_6625_6626_6627_6628_6629_6630_6631_6632_6633_6634_6635_6636_6637_6638_6639_6640_6641_6642_6643_6644_6645_6646_6647_6648_6649_6650_6651_6652_6653_6654_6655_6656_6657_6658_6659_6660_6661_6662_6663_6664_6665_6666_6667_6668_6669_6670_6671_6672_6673_6674_6675_6676_6677_6678_6679_6680_6681_6682_6683_6684_6685_6686_6687_6688_6689_6690_6691_6692_6693_6694_6695_6696_6697_6698_6699_6700_6701_6702_6703_6704_6705_6706_6707_6708_6709_6710_6711_6712_6713_6714_6715_6716_6717_6718_6719_6720_6721_6722_6723_6724_6725_6726_6727_6728_6729_6730_6731_6732_6733_6734_6735_6736_6737_6738_6739_6740_6741_6742_6743_6744_6745_6746_6747_6748_6749_6750_6751_6752_6753_6754_6755_6756_6757_6758_6759_6760_6761_6762_6763_6764_6765_6766_6767_6768_6769_6770_6771_6772_6773_6774_6775_6776_6777_6778_6779_6780_6781_6782_6783_6784_6785_6786_6787_6788_6789_6790_6791_6792_6793_6794_6795_6796_6797_6798_6799_6800_6801_6802_6803_6804_6805_6806_6807_6808_6809_6810_6811_6812_6813_6814_6815_6816_6817_6818_6819_6820_6821_6822_6823_6824_6825_6826_6827_6828_6829_6830_6831_6832_6833_6834_6835_6836_6837_6838_6839_6840_6841_6842_6843_6844_6845_6846_6847_6848_6849_6850_6851_6852_6853_6854_6855_6856_6857_6858_6859_6860_6861_6862_6863_6864_6865_6866_6867_6868_6869_6870_6871_6872_6873_6874_6875_6876_6877_6878_6879_6880_6881_6882_6883_6884_6885_6886_6887_6888_6889_6890_6891_6892_6893_6894_6895_6896_6897_6898_6899_6900_6901_6902_6903_6904_6905_6906_6907_6908_6909_6910_6911_6912_6913_6914_6915_6916_6917_6918_6919_6920_6921_6922_6923_6924_6925_6926_6927_6928_6929_6930_6931_6932_6933_6934_6935_6936_6937_6938_6939_6940_6941_6942_6943_6944_6945_6946_6947_6948_6949_6950_6951_6952_6953_6954_6955_6956_6957_6958_6959_6960_6961_6962_6963_6964_6965_6966_6967_6968_6969_6970_6971_6972_6973_6974_6975_6976_6977_6978_6979_6980_6981_6982_6983_6984_6985_6986_6987_6988_6989_6990_6991_6992_6993_6994_6995_6996_6997_6998_6999_7000_7001_7002_7003_7004_7005_7006_7007_7008_7009_7010_7011_7012_7013_7014_7015_7016_7017_7018_7019_7020_7021_7022_7023_7024_7025_7026_7027_7028_7029_7030_7031_7032_7033_7034_7035_7036_7037_7038_7039_7040_7041_7042_7043_7044_7045_7046_7047_7048_7049_7050_7051_7052_7053_7054_7055_7056_7057_7058_7059_7060_7061_7062_7063_7064_7065_7066_7067_7068_7069_7070_7071_7072_7073_7074_7075_7076_7077_7078_7079_7080_7081_7082_7083_7084_7085_7086_7087_7088_7089_7090_7091_7092_7093_7094_7095_7096_7097_7098_7099_7100_7101_7102_7103_7104_7105_7106_7107_7108_7109_7110_7111_7112_7113_7114_7115_7116_7117_7118_7119_7120_7121_7122_7123_7124_7125_7126_7127_7128_7129_7130_7131_7132_7133_7134_7135_7136_7137_7138_7139_7140_7141_7142_7143_7144_7145_7146_7147_7148_7149_7150_7151_7152_7153_7154_7155_7156_7157_7158_7159_7160_7161_7162_7163_7164_7165_7166_7167_7168_7169_7170_7171_7172_7173_7174_7175_7176_7177_7178_7179_7180_7181_7182_7183_7184_7185_7186_7187_7188_7189_7190_7191_7192_7193_7194_7195_7196_7197_7198_7199_7200_7201_7202_7203_7204_7205_7206_7207_7208_7209_7210_7211_7212_7213_7214_7215_7216_7217_7218_7219_7220_7221_7222_7223_7224_7225_7226_7227_7228_7229_7230_7231_7232_7233_7234_7235_7236_7237_7238_7239_7240_7241_7242_7243_7244_7245_7246_7247_7248_7249_7250_7251_7252_7253_7254_7255_7256_7257_7258_7259_7260_7261_7262_7263_7264_7265_7266_7267_7268_7269_7270_7271_7272_7273_7274_7275_7276_7277_7278_7279_7280_7281_7282_7283_7284_7285_7286_7287_7288_7289_7290_7291_7292_7293_7294_7295_7296_7297_7298_7299_7300_7301_7302_7303_7304_7305_7306_7307_7308_7309_7310_7311_7312_7313_7314_7315_7316_7317_7318_7319_7320_7321_7322_7323_7324_7325_7326_7327_7328_7329_7330_7331_7332_7333_7334_7335_7336_7337_7338_7339_7340_7341_7342_7343_7344_7345_7346_7347_7348_7349_7350_7351_7352_7353_7354_7355_7356_7357_7358_7359_7360_7361_7362_7363_7364_7365_7366_7367_7368_7369_7370_7371_7372_7373_7374_7375_7376_7377_7378_7379_7380_7381_7382_7383_7384_7385_7386_7387_7388_7389_7390_7391_7392_7393_7394_7395_7396_7397_7398_7399_7400_7401_7402_7403_7404_7405_7406_7407_7408_7409_7410_7411_7412_7413_7414_7415_7416_7417_7418_7419_7420_7421_7422_7423_7424_7425_7426_7427_7428_7429_7430_7431_7432_7433_7434_7435_7436_7437_7438_7439_7440_7441_7442_7443_7444_7445_7446_7447_7448_7449_7450_7451_7452_7453_7454_7455_7456_7457_7458_7459_7460_7461_7462_7463_7464_7465_7466_7467_7468_7469_7470_7471_7472_7473_7474_7475_7476_7477_7478_7479_7480_7481_7482_7483_7484_7485_7486_7487_7488_7489_7490_7491_7492_7493_7494_7495_7496_7497_7498_7499_7500_7501_7502_7503_7504_7505_7506_7507_7508_7509_7510_7511_7512_7513_7514_7515_7516_7517_7518_7519_7520_7521_7522_7523_7524_7525_7526_7527_7528_7529_7530_7531_7532_7533_7534_7535_7536_7537_7538_7539_7540_7541_7542_7543_7544_7545_7546_7547_7548_7549_7550_7551_7552_7553_7554_7555_7556_7557_7558_7559_7560_7561_7562_7563_7564_7565_7566_7567_7568_7569_7570_7571_7572_7573_7574_7575_7576_7577_7578_7579_7580_7581_7582_7583_7584_7585_7586_7587_7588_7589_7590_7591_7592_7593_7594_7595_7596_7597_7598_7599_7600_7601_7602_7603_7604_7605_7606_7607_7608_7609_7610_7611_7612_7613_7614_7615_7616_7617_7618_7619_7620_7621_7622_7623_7624_7625_7626_7627_7628_7629_7630_7631_7632_7633_7634_7635_7636_7637_7638_7639_7640_7641_7642_7643_7644_7645_7646_7647_7648_7649_7650_7651_7652_7653_7654_7655_7656_7657_7658_7659_7660_7661_7662_7663_7664_7665_7666_7667_7668_7669_7670_7671_7672_7673_7674_7675_7676_7677_7678_7679_7680_7681_7682_7683_7684_7685_7686_7687_7688_7689_7690_7691_7692_7693_7694_7695_7696_7697_7698_7699_7700_7701_7702_7703_7704_7705_7706_7707_7708_7709_7710_7711_7712_7713_7714_7715_7716_7717_7718_7719_7720_7721_7722_7723_7724_7725_7726_7727_7728_7729_7730_7731_7732_7733_7734_7735_7736_7737_7738_7739_7740_7741_7742_7743_7744_7745_7746_7747_7748_7749_7750_7751_7752_7753_7754_7755_7756_7757_7758_7759_7760_7761_7762_7763_7764_7765_7766_7767_7768_7769_7770_7771_7772_7773_7774_7775_7776_7777_7778_7779_7780_7781_7782_7783_7784_7785_7786_7787_7788_7789_7790_7791_7792_7793_7794_7795_7796_7797_7798_7799_7800_7801_7802_7803_7804_7805_7806_7807_7808_7809_7810_7811_7812_7813_7814_7815_7816_7817_7818_7819_7820_7821_7822_7823_7824_7825_7826_7827_7828_7829_7830_7831_7832_7833_7834_7835_7836_7837_7838_7839_7840_7841_7842_7843_7844_7845_7846_7847_7848_7849_7850_7851_7852_7853_7854_7855_7856_7857_7858_7859_7860_7861_7862_7863_7864_7865_7866_7867_7868_7869_7870_7871_7872_7873_7874_7875_7876_7877_7878_7879_7880_7881_7882_7883_7884_7885_7886_7887_7888_7889_7890_7891_7892_7893_7894_7895_7896_7897_7898_7899_7900_7901_7902_7903_7904_7905_7906_7907_7908_7909_7910_7911_7912_7913_7914_7915_7916_7917_7918_7919_7920_7921_7922_7923_7924_7925_7926_7927_7928_7929_7930_7931_7932_7933_7934_7935_7936_7937_7938_7939_7940_7941_7942_7943_7944_7945_7946_7947_7948_7949_7950_7951_7952_7953_7954_7955_7956_7957_7958_7959_7960_7961_7962_7963_7964_7965_7966_7967_7968_7969_7970_7971_7972_7973_7974_7975_7976_7977_7978_7979_7980_7981_7982_7983_7984_7985_7986_7987_7988_7989_7990_7991_7992_7993_7994_7995_7996_7997_7998_7999_8000_8001_8002_8003_8004_8005_8006_8007_8008_8009_8010_8011_8012_8013_8014_8015_8016_8017_8018_8019_8020_8021_8022_8023_8024_8025_8026_8027_8028_8029_8030_8031_8032_8033_8034_8035_8036_8037_8038_8039_8040_8041_8042_8043_8044_8045_8046_8047_8048_8049_8050_8051_8052_8053_8054_8055_8056_8057_8058_8059_8060_8061_8062_8063_8064_8065_8066_8067_8068_8069_8070_8071_8072_8073_8074_8075_8076_8077_8078_8079_8080_8081_8082_8083_8084_8085_8086_8087_8088_8089_8090_8091_8092_8093_8094_8095_8096_8097_8098_8099_8100_8101_8102_8103_8104_8105_8106_8107_8108_8109_8110_8111_8112_8113_8114_8115_8116_8117_8118_8119_8120_8121_8122_8123_8124_8125_8126_8127_8128_8129_8130_8131_8132_8133_8134_8135_8136_8137_8138_8139_8140_8141_8142_8143_8144_8145_8146_8147_8148_8149_8150_8151_8152_8153_8154_8155_8156_8157_8158_8159_8160_8161_8162_8163_8164_8165_8166_8167_8168_8169_8170_8171_8172_8173_8174_8175_8176_8177_8178_8179_8180_8181_8182_8183_8184_8185_8186_8187_8188_8189_8190_8191_8192_8193_8194_8195_8196_8197_8198_8199_8200_8201_8202_8203_8204_8205_8206_8207_8208_8209_8210_8211_8212_8213_8214_8215_8216_8217_8218_8219_8220_8221_8222_8223_8224_8225_8226_8227_8228_8229_8230_8231_8232_8233_8234_8235_8236_8237_8238_8239_8240_8241_8242_8243_8244_8245_8246_8247_8248_8249_8250_8251_8252_8253_8254_8255_8256_8257_8258_8259_8260_8261_8262_8263_8264_8265_8266_8267_8268_8269_8270_8271_8272_8273_8274_8275_8276_8277_8278_8279_8280_8281_8282_8283_8284_8285_8286_8287_8288_8289_8290_8291_8292_8293_8294_8295_8296_8297_8298_8299_8300_8301_8302_8303_8304_8305_8306_8307_8308_8309_8310_8311_8312_8313_8314_8315_8316_8317_8318_8319_8320_8321_8322_8323_8324_8325_8326_8327_8328_8329_8330_8331_8332_8333_8334_8335_8336_8337_8338_8339_8340_8341_8342_8343_8344_8345_8346_8347_8348_8349_8350_8351_8352_8353_8354_8355_8356_8357_8358_8359_8360_8361_8362_8363_8364_8365_8366_8367_8368_8369_8370_8371_8372_8373_8374_8375_8376_8377_8378_8379_8380_8381_8382_8383_8384_8385_8386_8387_8388_8389_8390_8391_8392_8393_8394_8395_8396_8397_8398_8399_8400_8401_8402_8403_8404_8405_8406_8407_8408_8409_8410_8411_8412_8413_8414_8415_8416_8417_8418_8419_8420_8421_8422_8423_8424_8425_8426_8427_8428_8429_8430_8431_8432_8433_8434_8435_8436_8437_8438_8439_8440_8441_8442_8443_8444_8445_8446_8447_8448_8449_8450_8451_8452_8453_8454_8455_8456_8457_8458_8459_8460_8461_8462_8463_8464_8465_8466_8467_8468_8469_8470_8471_8472_8473_8474_8475_8476_8477_8478_8479_8480_8481_8482_8483_8484_8485_8486_8487_8488_8489_8490_8491_8492_8493_8494_8495_8496_8497_8498_8499_8500_8501_8502_8503_8504_8505_8506_8507_8508_8509_8510_8511_8512_8513_8514_8515_8516_8517_8518_8519_8520_8521_8522_8523_8524_8525_8526_8527_8528_8529_8530_8531_8532_8533_8534_8535_8536_8537_8538_8539_8540_8541_8542_8543_8544_8545_8546_8547_8548_8549_8550_8551_8552_8553_8554_8555_8556_8557_8558_8559_8560_8561_8562_8563_8564_8565_8566_8567_8568_8569_8570_8571_8572_8573_8574_8575_8576_8577_8578_8579_8580_8581_8582_8583_8584_8585_8586_8587_8588_8589_8590_8591_8592_8593_8594_8595_8596_8597_8598_8599_8600_8601_8602_8603_8604_8605_8606_8607_8608_8609_8610_8611_8612_8613_8614_8615_8616_8617_8618_8619_8620_8621_8622_8623_8624_8625_8626_8627_8628_8629_8630_8631_8632_8633_8634_8635_8636_8637_8638_8639_8640_8641_8642_8643_8644_8645_8646_8647_8648_8649_8650_8651_8652_8653_8654_8655_8656_8657_8658_8659_8660_8661_8662_8663_8664_8665_8666_8667_8668_8669_8670_8671_8672_8673_8674_8675_8676_8677_8678_8679_8680_8681_8682_8683_8684_8685_8686_8687_8688_8689_8690_8691_8692_8693_8694_8695_8696_8697_8698_8699_8700_8701_8702_8703_8704_8705_8706_8707_8708_8709_8710_8711_8712_8713_8714_8715_8716_8717_8718_8719_8720_8721_8722_8723_8724_8725_8726_8727_8728_8729_8730_8731_8732_8733_8734_8735_8736_8737_8738_8739_8740_8741_8742_8743_8744_8745_8746_8747_8748_8749_8750_8751_8752_8753_8754_8755_8756_8757_8758_8759_8760_8761_8762_8763_8764_8765_8766_8767_8768_8769_8770_8771_8772_8773_8774_8775_8776_8777_8778_8779_8780_8781_8782_8783_8784_8785_8786_8787_8788_8789_8790_8791_8792_8793_8794_8795_8796_8797_8798_8799_8800_8801_8802_8803_8804_8805_8806_8807_8808_8809_8810_8811_8812_8813_8814_8815_8816_8817_8818_8819_8820_8821_8822_8823_8824_8825_8826_8827_8828_8829_8830_8831_8832_8833_8834_8835_8836_8837_8838_8839_8840_8841_8842_8843_8844_8845_8846_8847_8848_8849_8850_8851_8852_8853_8854_8855_8856_8857_8858_8859_8860_8861_8862_8863_8864_8865_8866_8867_8868_8869_8870_8871_8872_8873_8874_8875_8876_8877_8878_8879_8880_8881_8882_8883_8884_8885_8886_8887_8888_8889_8890_8891_8892_8893_8894_8895_8896_8897_8898_8899_8900_8901_8902_8903_8904_8905_8906_8907_8908_8909_8910_8911_8912_8913_8914_8915_8916_8917_8918_8919_8920_8921_8922_8923_8924_8925_8926_8927_8928_8929_8930_8931_8932_8933_8934_8935_8936_8937_8938_8939_8940_8941_8942_8943_8944_8945_8946_8947_8948_8949_8950_8951_8952_8953_8954_8955_8956_8957_8958_8959_8960_8961_8962_8963_8964_8965_8966_8967_8968_8969_8970_8971_8972_8973_8974_8975_8976_8977_8978_8979_8980_8981_8982_8983_8984_8985_8986_8987_8988_8989_8990_8991_8992_8993_8994_8995_8996_8997_8998_8999_9000_9001_9002_9003_9004_9005_9006_9007_9008_9009_9010_9011_9012_9013_9014_9015_9016_9017_9018_9019_9020_9021_9022_9023_9024_9025_9026_9027_9028_9029_9030_9031_9032_9033_9034_9035_9036_9037_9038_9039_9040_9041_9042_9043_9044_9045_9046_9047_9048_9049_9050_9051_9052_9053_9054_9055_9056_9057_9058_9059_9060_9061_9062_9063_9064_9065_9066_9067_9068_9069_9070_9071_9072_9073_9074_9075_9076_9077_9078_9079_9080_9081_9082_9083_9084_9085_9086_9087_9088_9089_9090_9091_9092_9093_9094_9095_9096_9097_9098_9099_9100_9101_9102_9103_9104_9105_9106_9107_9108_9109_9110_9111_9112_9113_9114_9115_9116_9117_9118_9119_9120_9121_9122_9123_9124_9125_9126_9127_9128_9129_9130_9131_9132_9133_9134_9135_9136_9137_9138_9139_9140_9141_9142_9143_9144_9145_9146_9147_9148_9149_9150_9151_9152_9153_9154_9155_9156_9157_9158_9159_9160_9161_9162_9163_9164_9165_9166_9167_9168_9169_9170_9171_9172_9173_9174_9175_9176_9177_9178_9179_9180_9181_9182_9183_9184_9185_9186_9187_9188_9189_9190_9191_9192_9193_9194_9195_9196_9197_9198_9199_9200_9201_9202_9203_9204_9205_9206_9207_9208_9209_9210_9211_9212_9213_9214_9215_9216_9217_9218_9219_9220_9221_9222_9223_9224_9225_9226_9227_9228_9229_9230_9231_9232_9233_9234_9235_9236_9237_9238_9239_9240_9241_9242_9243_9244_9245_9246_9247_9248_9249_9250_9251_9252_9253_9254_9255_9256_9257_9258_9259_9260_9261_9262_9263_9264_9265_9266_9267_9268_9269_9270_9271_9272_9273_9274_9275_9276_9277_9278_9279_9280_9281_9282_9283_9284_9285_9286_9287_9288_9289_9290_9291_9292_9293_9294_9295_9296_9297_9298_9299_9300_9301_9302_9303_9304_9305_9306_9307_9308_9309_9310_9311_9312_9313_9314_9315_9316_9317_9318_9319_9320_9321_9322_9323_9324_9325_9326_9327_9328_9329_9330_9331_9332_9333_9334_9335_9336_9337_9338_9339_9340_9341_9342_9343_9344_9345_9346_9347_9348_9349_9350_9351_9352_9353_9354_9355_9356_9357_9358_9359_9360_9361_9362_9363_9364_9365_9366_9367_9368_9369_9370_9371_9372_9373_9374_9375_9376_9377_9378_9379_9380_9381_9382_9383_9384_9385_9386_9387_9388_9389_9390_9391_9392_9393_9394_9395_9396_9397_9398_9399_9400_9401_9402_9403_9404_9405_9406_9407_9408_9409_9410_9411_9412_9413_9414_9415_9416_9417_9418_9419_9420_9421_9422_9423_9424_9425_9426_9427_9428_9429_9430_9431_9432_9433_9434_9435_9436_9437_9438_9439_9440_9441_9442_9443_9444_9445_9446_9447_9448_9449_9450_9451_9452_9453_9454_9455_9456_9457_9458_9459_9460_9461_9462_9463_9464_9465_9466_9467_9468_9469_9470_9471_9472_9473_9474_9475_9476_9477_9478_9479_9480_9481_9482_9483_9484_9485_9486_9487_9488_9489_9490_9491_9492_9493_9494_9495_9496_9497_9498_9499_9500_9501_9502_9503_9504_9505_9506_9507_9508_9509_9510_9511_9512_9513_9514_9515_9516_9517_9518_9519_9520_9521_9522_9523_9524_9525_9526_9527_9528_9529_9530_9531_9532_9533_9534_9535_9536_9537_9538_9539_9540_9541_9542_9543_9544_9545_9546_9547_9548_9549_9550_9551_9552_9553_9554_9555_9556_9557_9558_9559_9560_9561_9562_9563_9564_9565_9566_9567_9568_9569_9570_9571_9572_9573_9574_9575_9576_9577_9578_9579_9580_9581_9582_9583_9584_9585_9586_9587_9588_9589_9590_9591_9592_9593_9594_9595_9596_9597_9598_9599_9600_9601_9602_9603_9604_9605_9606_9607_9608_9609_9610_9611_9612_9613_9614_9615_9616_9617_9618_9619_9620_9621_9622_9623_9624_9625_9626_9627_9628_9629_9630_9631_9632_9633_9634_9635_9636_9637_9638_9639_9640_9641_9642_9643_9644_9645_9646_9647_9648_9649_9650_9651_9652_9653_9654_9655_9656_9657_9658_9659_9660_9661_9662_9663_9664_9665_9666_9667_9668_9669_9670_9671_9672_9673_9674_9675_9676_9677_9678_9679_9680_9681_9682_9683_9684_9685_9686_9687_9688_9689_9690_9691_9692_9693_9694_9695_9696_9697_9698_9699_9700_9701_9702_9703_9704_9705_9706_9707_9708_9709_9710_9711_9712_9713_9714_9715_9716_9717_9718_9719_9720_9721_9722_9723_9724_9725_9726_9727_9728_9729_9730_9731_9732_9733_9734_9735_9736_9737_9738_9739_9740_9741_9742_9743_9744_9745_9746_9747_9748_9749_9750_9751_9752_9753_9754_9755_9756_9757_9758_9759_9760_9761_9762_9763_9764_9765_9766_9767_9768_9769_9770_9771_9772_9773_9774_9775_9776_9777_9778_9779_9780_9781_9782_9783_9784_9785_9786_9787_9788_9789_9790_9791_9792_9793_9794_9795_9796_9797_9798_9799_9800_9801_9802_9803_9804_9805_9806_9807_9808_9809_9810_9811_9812_9813_9814_9815_9816_9817_9818_9819_9820_9821_9822_9823_9824_9825_9826_9827_9828_9829_9830_9831_9832_9833_9834_9835_9836_9837_9838_9839_9840_9841_9842_9843_9844_9845_9846_9847_9848_9849_9850_9851_9852_9853_9854_9855_9856_9857_9858_9859_9860_9861_9862_9863_9864_9865_9866_9867_9868_9869_9870_9871_9872_9873_9874_9875_9876_9877_9878_9879_9880_9881_9882_9883_9884_9885_9886_9887_9888_9889_9890_9891_9892_9893_9894_9895_9896_9897_9898_9899_9900_9901_9902_9903_9904_9905_9906_9907_9908_9909_9910_9911_9912_9913_9914_9915_9916_9917_9918_9919_9920_9921_9922_9923_9924_9925_9926_9927_9928_9929_9930_9931_9932_9933_9934_9935_9936_9937_9938_9939_9940_9941_9942_9943_9944_9945_9946_9947_9948_9949_9950_9951_9952_9953_9954_9955_9956_9957_9958_9959_9960_9961_9962_9963_9964_9965_9966_9967_9968_9969_9970_9971_9972_9973_9974_9975_9976_9977_9978_9979_9980_9981_9982_9983_9984_9985_9986_9987_9988_9989_9990_9991_9992_9993_9994_9995_9996_9997_9998_9999_10000_10001_10002_10003_10004_10005_10006_10007_10008_10009_10010_10011_10012_10013_10014_10015_10016_10017_10018_10019_10020_10021_10022_10023_10024_10025_10026_10027_10028_10029_10030_10031_10032_10033_10034_10035_10036_10037_10038_10039_10040_10041_10042_10043_10044_10045_10046_10047_10048_10049_10050_10051_10052_10053_10054_10055_10056_10057_10058_10059_10060_10061_10062_10063_10064_10065_10066_10067_10068_10069_10070_10071_10072_10073_10074_10075_10076_10077_10078_10079_10080_10081_10082_10083_10084_10085_10086_10087_10088_10089_10090_10091_10092_10093_10094_10095_10096_10097_10098_10099_10100_10101_10102_10103_10104_10105_10106_10107_10108_10109_10110_10111_10112_10113_10114_10115_10116_10117_10118_10119_10120_10121_10122_10123_10124_10125_10126_10127_10128_10129_10130_10131_10132_10133_10134_10135_10136_10137_10138_10139_10140_10141_10142_10143_10144_10145_10146_10147_10148_10149_10150_10151_10152_10153_10154_10155_10156_10157_10158_10159_10160_10161_10162_10163_10164_10165_10166_10167_10168_10169_10170_10171_10172_10173_10174_10175_10176_10177_10178_10179_10180_10181_10182_10183_10184_10185_10186_10187_10188_10189_10190_10191_10192_10193_10194_10195_10196_10197_10198_10199_10200_10201_10202_10203_10204_10205_10206_10207_10208_10209_10210_10211_10212_10213_10214_10215_10216_10217_10218_10219_10220_10221_10222_10223_10224_10225_10226_10227_10228_10229_10230_10231_10232_10233_10234_10235_10236_10237_10238_10239_10240_10241_10242_10243_10244_10245_10246_10247_10248_10249_10250_10251_10252_10253_10254_10255_10256_10257_10258_10259_10260_10261_10262_10263_10264_10265_10266_10267_10268_10269_10270_10271_10272_10273_10274_10275_10276_10277_10278_10279_10280_10281_10282_10283_10284_10285_10286_10287_10288_10289_10290_10291_10292_10293_10294_10295_10296_10297_10298_10299_10300_10301_10302_10303_10304_10305_10306_10307_10308_10309_10310_10311_10312_10313_10314_10315_10316_10317_10318_10319_10320_10321_10322_10323_10324_10325_10326_10327_10328_10329_10330_10331_10332_10333_10334_10335_10336_10337_10338_10339_10340_10341_10342_10343_10344_10345_10346_10347_10348_10349_10350_10351_10352_10353_10354_10355_10356_10357_10358_10359_10360_10361_10362_10363_10364_10365_10366_10367_10368_10369_10370_10371_10372_10373_10374_10375_10376_10377_10378_10379_10380_10381_10382_10383_10384_10385_10386_10387_10388_10389_10390_10391_10392_10393_10394_10395_10396_10397_10398_10399_10400_10401_10402_10403_10404_10405_10406_10407_10408_10409_10410_10411_10412_10413_10414_10415_10416_10417_10418_10419_10420_10421_10422_10423_10424_10425_10426_10427_10428_10429_10430_10431_10432_10433_10434_10435_10436_10437_10438_10439_10440_10441_10442_10443_10444_10445_10446_10447_10448_10449_10450_10451_10452_10453_10454_10455_10456_10457_10458_10459_10460_10461_10462_10463_10464_10465_10466_10467_10468_10469_10470_10471_10472_10473_10474_10475_10476_10477_10478_10479_10480_10481_10482_10483_10484_10485_10486_10487_10488_10489_10490_10491_10492_10493_10494_10495_10496_10497_10498_10499_10500_10501_10502_10503_10504_10505_10506_10507_10508_10509_10510_10511_10512_10513_10514_10515_10516_10517_10518_10519_10520_10521_10522_10523_10524_10525_10526_10527_10528_10529_10530_10531_10532_10533_10534_10535_10536_10537_10538_10539_10540_10541_10542_10543_10544_10545_10546_10547_10548_10549_10550_10551_10552_10553_10554_10555_10556_10557_10558_10559_10560_10561_10562_10563_10564_10565_10566_10567_10568_10569_10570_10571_10572_10573_10574_10575_10576_10577_10578_10579_10580_10581_10582_10583_10584_10585_10586_10587_10588_10589_10590_10591_10592_10593_10594_10595_10596_10597_10598_10599_10600_10601_10602_10603_10604_10605_10606_10607_10608_10609_10610_10611_10612_10613_10614_10615_10616_10617_10618_10619_10620_10621_10622_10623_10624_10625_10626_10627_10628_10629_10630_10631_10632_10633_10634_10635_10636_10637_10638_10639_10640_10641_10642_10643_10644_10645_10646_10647_10648_10649_10650_10651_10652_10653_10654_10655_10656_10657_10658_10659_10660_10661_10662_10663_10664_10665_10666_10667_10668_10669_10670_10671_10672_10673_10674_10675_10676_10677_10678_10679_10680_10681_10682_10683_10684_10685_10686_10687_10688_10689_10690_10691_10692_10693_10694_10695_10696_10697_10698_10699_10700_10701_10702_10703_10704_10705_10706_10707_10708_10709_10710_10711_10712_10713_10714_10715_10716_10717_10718_10719_10720_10721_10722_10723_10724_10725_10726_10727_10728_10729_10730_10731_10732_10733_10734_10735_10736_10737_10738_10739_10740_10741_10742_10743_10744_10745_10746_10747_10748_10749_10750_10751_10752_10753_10754_10755_10756_10757_10758_10759_10760_10761_10762_10763_10764_10765_10766_10767_10768_10769_10770_10771_10772_10773_10774_10775_10776_10777_10778_10779_10780_10781_10782_10783_10784_10785_10786_10787_10788_10789_10790_10791_10792_10793_10794_10795_10796_10797_10798_10799_10800_10801_10802_10803_10804_10805_10806_10807_10808_10809_10810_10811_10812_10813_10814_10815_10816_10817_10818_10819_10820_10821_10822_10823_10824_10825_10826_10827_10828_10829_10830_10831_10832_10833_10834_10835_10836_10837_10838_10839_10840_10841_10842_10843_10844_10845_10846_10847_10848_10849_10850_10851_10852_10853_10854_10855_10856_10857_10858_10859_10860_10861_10862_10863_10864_10865_10866_10867_10868_10869_10870_10871_10872_10873_10874_10875_10876_10877_10878_10879_10880_10881_10882_10883_10884_10885_10886_10887_10888_10889_10890_10891_10892_10893_10894_10895_10896_10897_10898_10899_10900_10901_10902_10903_10904_10905_10906_10907_10908_10909_10910_10911_10912_10913_10914_10915_10916_10917_10918_10919_10920_10921_10922_10923_10924_10925_10926_10927_10928_10929_10930_10931_10932_10933_10934_10935_10936_10937_10938_10939_10940_10941_10942_10943_10944_10945_10946_10947_10948_10949_10950_10951_10952_10953_10954_10955_10956_10957_10958_10959_10960_10961_10962_10963_10964_10965_10966_10967_10968_10969_10970_10971_10972_10973_10974_10975_10976_10977_10978_10979_10980_10981_10982_10983_10984_10985_10986_10987_10988_10989_10990_10991_10992_10993_10994_10995_10996_10997_10998_10999_11000_11001_11002_11003_11004_11005_11006_11007_11008_11009_11010_11011_11012_11013_11014_11015_11016_11017_11018_11019_11020_11021_11022_11023_11024_11025_11026_11027_11028_11029_11030_11031_11032_11033_11034_11035_11036_11037_11038_11039_11040_11041_11042_11043_11044_11045_11046_11047_11048_11049_11050_11051_11052_11053_11054_11055_11056_11057_11058_11059_11060_11061_11062_11063_11064_11065_11066_11067_11068_11069_11070_11071_11072_11073_11074_11075_11076_11077_11078_11079_11080_11081_11082_11083_11084_11085_11086_11087_11088_11089_11090_11091_11092_11093_11094_11095_11096_11097_11098_11099_11100_11101_11102_11103_11104_11105_11106_11107_11108_11109_11110_11111_11112_11113_11114_11115_11116_11117_11118_11119_11120_11121_11122_11123_11124_11125_11126_11127_11128_11129_11130_11131_11132_11133_11134_11135_11136_11137_11138_11139_11140_11141_11142_11143_11144_11145_11146_11147_11148_11149_11150_11151_11152_11153_11154_11155_11156_11157_11158_11159_11160_11161_11162_11163_11164_11165_11166_11167_11168_11169_11170_11171_11172_11173_11174_11175_11176_11177_11178_11179_11180_11181_11182_11183_11184_11185_11186_11187_11188_11189_11190_11191_11192_11193_11194_11195_11196_11197_11198_11199_11200_11201_11202_11203_11204_11205_11206_11207_11208_11209_11210_11211_11212_11213_11214_11215_11216_11217_11218_11219_11220_11221_11222_11223_11224_11225_11226_11227_11228_11229_11230_11231_11232_11233_11234_11235_11236_11237_11238_11239_11240_11241_11242_11243_11244_11245_11246_11247_11248_11249_11250_11251_11252_11253_11254_11255_11256_11257_11258_11259_11260_11261_11262_11263_11264_11265_11266_11267_11268_11269_11270_11271_11272_11273_11274_11275_11276_11277_11278_11279_11280_11281_11282_11283_11284_11285_11286_11287_11288_11289_11290_11291_11292_11293_11294_11295_11296_11297_11298_11299_11300_11301_11302_11303_11304_11305_11306_11307_11308_11309_11310_11311_11312_11313_11314_11315_11316_11317_11318_11319_11320_11321_11322_11323_11324_11325_11326_11327_11328_11329_11330_11331_11332_11333_11334_11335_11336_11337_11338_11339_11340_11341_11342_11343_11344_11345_11346_11347_11348_11349_11350_11351_11352_11353_11354_11355_11356_11357_11358_11359_11360_11361_11362_11363_11364_11365_11366_11367_11368_11369_11370_11371_11372_11373_11374_11375_11376_11377_11378_11379_11380_11381_11382_11383_11384_11385_11386_11387_11388_11389_11390_11391_11392_11393_11394_11395_11396_11397_11398_11399_11400_11401_11402_11403_11404_11405_11406_11407_11408_11409_11410_11411_11412_11413_11414_11415_11416_11417_11418_11419_11420_11421_11422_11423_11424_11425_11426_11427_11428_11429_11430_11431_11432_11433_11434_11435_11436_11437_11438_11439_11440_11441_11442_11443_11444_11445_11446_11447_11448_11449_11450_11451_11452_11453_11454_11455_11456_11457_11458_11459_11460_11461_11462_11463_11464_11465_11466_11467_11468_11469_11470_11471_11472_11473_11474_11475_11476_11477_11478_11479_11480_11481_11482_11483_11484_11485_11486_11487_11488_11489_11490_11491_11492_11493_11494_11495_11496_11497_11498_11499_11500_11501_11502_11503_11504_11505_11506_11507_11508_11509_11510_11511_11512_11513_11514_11515_11516_11517_11518_11519_11520_11521_11522_11523_11524_11525_11526_11527_11528_11529_11530_11531_11532_11533_11534_11535_11536_11537_11538_11539_11540_11541_11542_11543_11544_11545_11546_11547_11548_11549_11550_11551_11552_11553_11554_11555_11556_11557_11558_11559_11560_11561_11562_11563_11564_11565_11566_11567_11568_11569_11570_11571_11572_11573_11574_11575_11576_11577_11578_11579_11580_11581_11582_11583_11584_11585_11586_11587_11588_11589_11590_11591_11592_11593_11594_11595_11596_11597_11598_11599_11600_11601_11602_11603_11604_11605_11606_11607_11608_11609_11610_11611_11612_11613_11614_11615_11616_11617_11618_11619_11620_11621_11622_11623_11624_11625_11626_11627_11628_11629_11630_11631_11632_11633_11634_11635_11636_11637_11638_11639_11640_11641_11642_11643_11644_11645_11646_11647_11648_11649_11650_11651_11652_11653_11654_11655_11656_11657_11658_11659_11660_11661_11662_11663_11664_11665_11666_11667_11668_11669_11670_11671_11672_11673_11674_11675_11676_11677_11678_11679_11680_11681_11682_11683_11684_11685_11686_11687_11688_11689_11690_11691_11692_11693_11694_11695_11696_11697_11698_11699_11700_11701_11702_11703_11704_11705_11706_11707_11708_11709_11710_11711_11712_11713_11714_11715_11716_11717_11718_11719_11720_11721_11722_11723_11724_11725_11726_11727_11728_11729_11730_11731_11732_11733_11734_11735_11736_11737_11738_11739_11740_11741_11742_11743_11744_11745_11746_11747_11748_11749_11750_11751_11752_11753_11754_11755_11756_11757_11758_11759_11760_11761_11762_11763_11764_11765_11766_11767_11768_11769_11770_11771_11772_11773_11774_11775_11776_11777_11778_11779_11780_11781_11782_11783_11784_11785_11786_11787_11788_11789_11790_11791_11792_11793_11794_11795_11796_11797_11798_11799_11800_11801_11802_11803_11804_11805_11806_11807_11808_11809_11810_11811_11812_11813_11814_11815_11816_11817_11818_11819_11820_11821_11822_11823_11824_11825_11826_11827_11828_11829_11830_11831_11832_11833_11834_11835_11836_11837_11838_11839_11840_11841_11842_11843_11844_11845_11846_11847_11848_11849_11850_11851_11852_11853_11854_11855_11856_11857_11858_11859_11860_11861_11862_11863_11864_11865_11866_11867_11868_11869_11870_11871_11872_11873_11874_11875_11876_11877_11878_11879_11880_11881_11882_11883_11884_11885_11886_11887_11888_11889_11890_11891_11892_11893_11894_11895_11896_11897_11898_11899_11900_11901_11902_11903_11904_11905_11906_11907_11908_11909_11910_11911_11912_11913_11914_11915_11916_11917_11918_11919_11920_11921_11922_11923_11924_11925_11926_11927_11928_11929_11930_11931_11932_11933_11934_11935_11936_11937_11938_11939_11940_11941_11942_11943_11944_11945_11946_11947_11948_11949_11950_11951_11952_11953_11954_11955_11956_11957_11958_11959_11960_11961_11962_11963_11964_11965_11966_11967_11968_11969_11970_11971_11972_11973_11974_11975_11976_11977_11978_11979_11980_11981_11982_11983_11984_11985_11986_11987_11988_11989_11990_11991_11992_11993_11994_11995_11996_11997_11998_11999_12000_12001_12002_12003_12004_12005_12006_12007_12008_12009_12010_12011_12012_12013_12014_12015_12016_12017_12018_12019_12020_12021_12022_12023_12024_12025_12026_12027_12028_12029_12030_12031_12032_12033_12034_12035_12036_12037_12038_12039_12040_12041_12042_12043_12044_12045_12046_12047_12048_12049_12050_12051_12052_12053_12054_12055_12056_12057_12058_12059_12060_12061_12062_12063_12064_12065_12066_12067_12068_12069_12070_12071_12072_12073_12074_12075_12076_12077_12078_12079_12080_12081_12082_12083_12084_12085_12086_12087_12088_12089_12090_12091_12092_12093_12094_12095_12096_12097_12098_12099_12100_12101_12102_12103_12104_12105_12106_12107_12108_12109_12110_12111_12112_12113_12114_12115_12116_12117_12118_12119_12120_12121_12122_12123_12124_12125_12126_12127_12128_12129_12130_12131_12132_12133_12134_12135_12136_12137_12138_12139_12140_12141_12142_12143_12144_12145_12146_12147_12148_12149_12150_12151_12152_12153_12154_12155_12156_12157_12158_12159_12160_12161_12162_12163_12164_12165_12166_12167_12168_12169_12170_12171_12172_12173_12174_12175_12176_12177_12178_12179_12180_12181_12182_12183_12184_12185_12186_12187_12188_12189_12190_12191_12192_12193_12194_12195_12196_12197_12198_12199_12200_12201_12202_12203_12204_12205_12206_12207_12208_12209_12210_12211_12212_12213_12214_12215_12216_12217_12218_12219_12220_12221_12222_12223_12224_12225_12226_12227_12228_12229_12230_12231_12232_12233_12234_12235_12236_12237_12238_12239_12240_12241_12242_12243_12244_12245_12246_12247_12248_12249_12250_12251_12252_12253_12254_12255_12256_12257_12258_12259_12260_12261_12262_12263_12264_12265_12266_12267_12268_12269_12270_12271_12272_12273_12274_12275_12276_12277_12278_12279_12280_12281_12282_12283_12284_12285_12286_12287_12288_12289_12290_12291_12292_12293_12294_12295_12296_12297_12298_12299_12300_12301_12302_12303_12304_12305_12306_12307_12308_12309_12310_12311_12312_12313_12314_12315_12316_12317_12318_12319_12320_12321_12322_12323_12324_12325_12326_12327_12328_12329_12330_12331_12332_12333_12334_12335_12336_12337_12338_12339_12340_12341_12342_12343_12344_12345_12346_12347_12348_12349_12350_12351_12352_12353_12354_12355_12356_12357_12358_12359_12360_12361_12362_12363_12364_12365_12366_12367_12368_12369_12370_12371_12372_12373_12374_12375_12376_12377_12378_12379_12380_12381_12382_12383_12384_12385_12386_12387_12388_12389_12390_12391_12392_12393_12394_12395_12396_12397_12398_12399_12400_12401_12402_12403_12404_12405_12406_12407_12408_12409_12410_12411_12412_12413_12414_12415_12416_12417_12418_12419_12420_12421_12422_12423_12424_12425_12426_12427_12428_12429_12430_12431_12432_12433_12434_12435_12436_12437_12438_12439_12440_12441_12442_12443_12444_12445_12446_12447_12448_12449_12450_12451_12452_12453_12454_12455_12456_12457_12458_12459_12460_12461_12462_12463_12464_12465_12466_12467_12468_12469_12470_12471_12472_12473_12474_12475_12476_12477_12478_12479_12480_12481_12482_12483_12484_12485_12486_12487_12488_12489_12490_12491_12492_12493_12494_12495_12496_12497_12498_12499_12500_12501_12502_12503_12504_12505_12506_12507_12508_12509_12510_12511_12512_12513_12514_12515_12516_12517_12518_12519_12520_12521_12522_12523_12524_12525_12526_12527_12528_12529_12530_12531_12532_12533_12534_12535_12536_12537_12538_12539_12540_12541_12542_12543_12544_12545_12546_12547_12548_12549_12550_12551_12552_12553_12554_12555_12556_12557_12558_12559_12560_12561_12562_12563_12564_12565_12566_12567_12568_12569_12570_12571_12572_12573_12574_12575_12576_12577_12578_12579_12580_12581_12582_12583_12584_12585_12586_12587_12588_12589_12590_12591_12592_12593_12594_12595_12596_12597_12598_12599_12600_12601_12602_12603_12604_12605_12606_12607_12608_12609_12610_12611_12612_12613_12614_12615_12616_12617_12618_12619_12620_12621_12622_12623_12624_12625_12626_12627_12628_12629_12630_12631_12632_12633_12634_12635_12636_12637_12638_12639_12640_12641_12642_12643_12644_12645_12646_12647_12648_12649_12650_12651_12652_12653_12654_12655_12656_12657_12658_12659_12660_12661_12662_12663_12664_12665_12666_12667_12668_12669_12670_12671_12672_12673_12674_12675_12676_12677_12678_12679_12680_12681_12682_12683_12684_12685_12686_12687_12688_12689_12690_12691_12692_12693_12694_12695_12696_12697_12698_12699_12700_12701_12702_12703_12704_12705_12706_12707_12708_12709_12710_12711_12712_12713_12714_12715_12716_12717_12718_12719_12720_12721_12722_12723_12724_12725_12726_12727_12728_12729_12730_12731_12732_12733_12734_12735_12736_12737_12738_12739_12740_12741_12742_12743_12744_12745_12746_12747_12748_12749_12750_12751_12752_12753_12754_12755_12756_12757_12758_12759_12760_12761_12762_12763_12764_12765_12766_12767_12768_12769_12770_12771_12772_12773_12774_12775_12776_12777_12778_12779_12780_12781_12782_12783_12784_12785_12786_12787_12788_12789_12790_12791_12792_12793_12794_12795_12796_12797_12798_12799_12800_12801_12802_12803_12804_12805_12806_12807_12808_12809_12810_12811_12812_12813_12814_12815_12816_12817_12818_12819_12820_12821_12822_12823_12824_12825_12826_12827_12828_12829_12830_12831_12832_12833_12834_12835_12836_12837_12838_12839_12840_12841_12842_12843_12844_12845_12846_12847_12848_12849_12850_12851_12852_12853_12854_12855_12856_12857_12858_12859_12860_12861_12862_12863_12864_12865_12866_12867_12868_12869_12870_12871_12872_12873_12874_12875_12876_12877_12878_12879_12880_12881_12882_12883_12884_12885_12886_12887_12888_12889_12890_12891_12892_12893_12894_12895_12896_12897_12898_12899_12900_12901_12902_12903_12904_12905_12906_12907_12908_12909_12910_12911_12912_12913_12914_12915_12916_12917_12918_12919_12920_12921_12922_12923_12924_12925_12926_12927_12928_12929_12930_12931_12932_12933_12934_12935_12936_12937_12938_12939_12940_12941_12942_12943_12944_12945_12946_12947_12948_12949_12950_12951_12952_12953_12954_12955_12956_12957_12958_12959_12960_12961_12962_12963_12964_12965_12966_12967_12968_12969_12970_12971_12972_12973_12974_12975_12976_12977_12978_12979_12980_12981_12982_12983_12984_12985_12986_12987_12988_12989_12990_12991_12992_12993_12994_12995_12996_12997_12998_12999_13000_13001_13002_13003_13004_13005_13006_13007_13008_13009_13010_13011_13012_13013_13014_13015_13016_13017_13018_13019_13020_13021_13022_13023_13024_13025_13026_13027_13028_13029_13030_13031_13032_13033_13034_13035_13036_13037_13038_13039_13040_13041_13042_13043_13044_13045_13046_13047_13048_13049_13050_13051_13052_13053_13054_13055_13056_13057_13058_13059_13060_13061_13062_13063_13064_13065_13066_13067_13068_13069_13070_13071_13072_13073_13074_13075_13076_13077_13078_13079_13080_13081_13082_13083_13084_13085_13086_13087_13088_13089_13090_13091_13092_13093_13094_13095_13096_13097_13098_13099_13100_13101_13102_13103_13104_13105_13106_13107_13108_13109_13110_13111_13112_13113_13114_13115_13116_13117_13118_13119_13120_13121_13122_13123_13124_13125_13126_13127_13128_13129_13130_13131_13132_13133_13134_13135_13136_13137_13138_13139_13140_13141_13142_13143_13144_13145_13146_13147_13148_13149_13150_13151_13152_13153_13154_13155_13156_13157_13158_13159_13160_13161_13162_13163_13164_13165_13166_13167_13168_13169_13170_13171_13172_13173_13174_13175_13176_13177_13178_13179_13180_13181_13182_13183_13184_13185_13186_13187_13188_13189_13190_13191_13192_13193_13194_13195_13196_13197_13198_13199_13200_13201_13202_13203_13204_13205_13206_13207_13208_13209_13210_13211_13212_13213_13214_13215_13216_13217_13218_13219_13220_13221_13222_13223_13224_13225_13226_13227_13228_13229_13230_13231_13232_13233_13234_13235_13236_13237_13238_13239_13240_13241_13242_13243_13244_13245_13246_13247_13248_13249_13250_13251_13252_13253_13254_13255_13256_13257_13258_13259_13260_13261_13262_13263_13264_13265_13266_13267_13268_13269_13270_13271_13272_13273_13274_13275_13276_13277_13278_13279_13280_13281_13282_13283_13284_13285_13286_13287_13288_13289_13290_13291_13292_13293_13294_13295_13296_13297_13298_13299_13300_13301_13302_13303_13304_13305_13306_13307_13308_13309_13310_13311_13312_13313_13314_13315_13316_13317_13318_13319_13320_13321_13322_13323_13324_13325_13326_13327_13328_13329_13330_13331_13332_13333_13334_13335_13336_13337_13338_13339_13340_13341_13342_13343_13344_13345_13346_13347_13348_13349_13350_13351_13352_13353_13354_13355_13356_13357_13358_13359_13360_13361_13362_13363_13364_13365_13366_13367_13368_13369_13370_13371_13372_13373_13374_13375_13376_13377_13378_13379_13380_13381_13382_13383_13384_13385_13386_13387_13388_13389_13390_13391_13392_13393_13394_13395_13396_13397_13398_13399_13400_13401_13402_13403_13404_13405_13406_13407_13408_13409_13410_13411_13412_13413_13414_13415_13416_13417_13418_13419_13420_13421_13422_13423_13424_13425_13426_13427_13428_13429_13430_13431_13432_13433_13434_13435_13436_13437_13438_13439_13440_13441_13442_13443_13444_13445_13446_13447_13448_13449_13450_13451_13452_13453_13454_13455_13456_13457_13458_13459_13460_13461_13462_13463_13464_13465_13466_13467_13468_13469_13470_13471_13472_13473_13474_13475_13476_13477_13478_13479_13480_13481_13482_13483_13484_13485_13486_13487_13488_13489_13490_13491_13492_13493_13494_13495_13496_13497_13498_13499_13500_13501_13502_13503_13504_13505_13506_13507_13508_13509_13510_13511_13512_13513_13514_13515_13516_13517_13518_13519_13520_13521_13522_13523_13524_13525_13526_13527_13528_13529_13530_13531_13532_13533_13534_13535_13536_13537_13538_13539_13540_13541_13542_13543_13544_13545_13546_13547_13548_13549_13550_13551_13552_13553_13554_13555_13556_13557_13558_13559_13560_13561_13562_13563_13564_13565_13566_13567_13568_13569_13570_13571_13572_13573_13574_13575_13576_13577_13578_13579_13580_13581_13582_13583_13584_13585_13586_13587_13588_13589_13590_13591_13592_13593_13594_13595_13596_13597_13598_13599_13600_13601_13602_13603_13604_13605_13606_13607_13608_13609_13610_13611_13612_13613_13614_13615_13616_13617_13618_13619_13620_13621_13622_13623_13624_13625_13626_13627_13628_13629_13630_13631_13632_13633_13634_13635_13636_13637_13638_13639_13640_13641_13642_13643_13644_13645_13646_13647_13648_13649_13650_13651_13652_13653_13654_13655_13656_13657_13658_13659_13660_13661_13662_13663_13664_13665_13666_13667_13668_13669_13670_13671_13672_13673_13674_13675_13676_13677_13678_13679_13680_13681_13682_13683_13684_13685_13686_13687_13688_13689_13690_13691_13692_13693_13694_13695_13696_13697_13698_13699_13700_13701_13702_13703_13704_13705_13706_13707_13708_13709_13710_13711_13712_13713_13714_13715_13716_13717_13718_13719_13720_13721_13722_13723_13724_13725_13726_13727_13728_13729_13730_13731_13732_13733_13734_13735_13736_13737_13738_13739_13740_13741_13742_13743_13744_13745_13746_13747_13748_13749_13750_13751_13752_13753_13754_13755_13756_13757_13758_13759_13760_13761_13762_13763_13764_13765_13766_13767_13768_13769_13770_13771_13772_13773_13774_13775_13776_13777_13778_13779_13780_13781_13782_13783_13784_13785_13786_13787_13788_13789_13790_13791_13792_13793_13794_13795_13796_13797_13798_13799_13800_13801_13802_13803_13804_13805_13806_13807_13808_13809_13810_13811_13812_13813_13814_13815_13816_13817_13818_13819_13820_13821_13822_13823_13824_13825_13826_13827_13828_13829_13830_13831_13832_13833_13834_13835_13836_13837_13838_13839_13840_13841_13842_13843_13844_13845_13846_13847_13848_13849_13850_13851_13852_13853_13854_13855_13856_13857_13858_13859_13860_13861_13862_13863_13864_13865_13866_13867_13868_13869_13870_13871_13872_13873_13874_13875_13876_13877_13878_13879_13880_13881_13882_13883_13884_13885_13886_13887_13888_13889_13890_13891_13892_13893_13894_13895_13896_13897_13898_13899_13900_13901_13902_13903_13904_13905_13906_13907_13908_13909_13910_13911_13912_13913_13914_13915_13916_13917_13918_13919_13920_13921_13922_13923_13924_13925_13926_13927_13928_13929_13930_13931_13932_13933_13934_13935_13936_13937_13938_13939_13940_13941_13942_13943_13944_13945_13946_13947_13948_13949_13950_13951_13952_13953_13954_13955_13956_13957_13958_13959_13960_13961_13962_13963_13964_13965_13966_13967_13968_13969_13970_13971_13972_13973_13974_13975_13976_13977_13978_13979_13980_13981_13982_13983_13984_13985_13986_13987_13988_13989_13990_13991_13992_13993_13994_13995_13996_13997_13998_13999_14000_14001_14002_14003_14004_14005_14006_14007_14008_14009_14010_14011_14012_14013_14014_14015_14016_14017_14018_14019_14020_14021_14022_14023_14024_14025_14026_14027_14028_14029_14030_14031_14032_14033_14034_14035_14036_14037_14038_14039_14040_14041_14042_14043_14044_14045_14046_14047_14048_14049_14050_14051_14052_14053_14054_14055_14056_14057_14058_14059_14060_14061_14062_14063_14064_14065_14066_14067_14068_14069_14070_14071_14072_14073_14074_14075_14076_14077_14078_14079_14080_14081_14082_14083_14084_14085_14086_14087_14088_14089_14090_14091_14092_14093_14094_14095_14096_14097_14098_14099_14100_14101_14102_14103_14104_14105_14106_14107_14108_14109_14110_14111_14112_14113_14114_14115_14116_14117_14118_14119_14120_14121_14122_14123_14124_14125_14126_14127_14128_14129_14130_14131_14132_14133_14134_14135_14136_14137_14138_14139_14140_14141_14142_14143_14144_14145_14146_14147_14148_14149_14150_14151_14152_14153_14154_14155_14156_14157_14158_14159_14160_14161_14162_14163_14164_14165_14166_14167_14168_14169_14170_14171_14172_14173_14174_14175_14176_14177_14178_14179_14180_14181_14182_14183_14184_14185_14186_14187_14188_14189_14190_14191_14192_14193_14194_14195_14196_14197_14198_14199_14200_14201_14202_14203_14204_14205_14206_14207_14208_14209_14210_14211_14212_14213_14214_14215_14216_14217_14218_14219_14220_14221_14222_14223_14224_14225_14226_14227_14228_14229_14230_14231_14232_14233_14234_14235_14236_14237_14238_14239_14240_14241_14242_14243_14244_14245_14246_14247_14248_14249_14250_14251_14252_14253_14254_14255_14256_14257_14258_14259_14260_14261_14262_14263_14264_14265_14266_14267_14268_14269_14270_14271_14272_14273_14274_14275_14276_14277_14278_14279_14280_14281_14282_14283_14284_14285_14286_14287_14288_14289_14290_14291_14292_14293_14294_14295_14296_14297_14298_14299_14300_14301_14302_14303_14304_14305_14306_14307_14308_14309_14310_14311_14312_14313_14314_14315_14316_14317_14318_14319_14320_14321_14322_14323_14324_14325_14326_14327_14328_14329_14330_14331_14332_14333_14334_14335_14336_14337_14338_14339_14340_14341_14342_14343_14344_14345_14346_14347_14348_14349_14350_14351_14352_14353_14354_14355_14356_14357_14358_14359_14360_14361_14362_14363_14364_14365_14366_14367_14368_14369_14370_14371_14372_14373_14374_14375_14376_14377_14378_14379_14380_14381_14382_14383_14384_14385_14386_14387_14388_14389_14390_14391_14392_14393_14394_14395_14396_14397_14398_14399_14400_14401_14402_14403_14404_14405_14406_14407_14408_14409_14410_14411_14412_14413_14414_14415_14416_14417_14418_14419_14420_14421_14422_14423_14424_14425_14426_14427_14428_14429_14430_14431_14432_14433_14434_14435_14436_14437_14438_14439_14440_14441_14442_14443_14444_14445_14446_14447_14448_14449_14450_14451_14452_14453_14454_14455_14456_14457_14458_14459_14460_14461_14462_14463_14464_14465_14466_14467_14468_14469_14470_14471_14472_14473_14474_14475_14476_14477_14478_14479_14480_14481_14482_14483_14484_14485_14486_14487_14488_14489_14490_14491_14492_14493_14494_14495_14496_14497_14498_14499_14500_14501_14502_14503_14504_14505_14506_14507_14508_14509_14510_14511_14512_14513_14514_14515_14516_14517_14518_14519_14520_14521_14522_14523_14524_14525_14526_14527_14528_14529_14530_14531_14532_14533_14534_14535_14536_14537_14538_14539_14540_14541_14542_14543_14544_14545_14546_14547_14548_14549_14550_14551_14552_14553_14554_14555_14556_14557_14558_14559_14560_14561_14562_14563_14564_14565_14566_14567_14568_14569_14570_14571_14572_14573_14574_14575_14576_14577_14578_14579_14580_14581_14582_14583_14584_14585_14586_14587_14588_14589_14590_14591_14592_14593_14594_14595_14596_14597_14598_14599_14600_14601_14602_14603_14604_14605_14606_14607_14608_14609_14610_14611_14612_14613_14614_14615_14616_14617_14618_14619_14620_14621_14622_14623_14624_14625_14626_14627_14628_14629_14630_14631_14632_14633_14634_14635_14636_14637_14638_14639_14640_14641_14642_14643_14644_14645_14646_14647_14648_14649_14650_14651_14652_14653_14654_14655_14656_14657_14658_14659_14660_14661_14662_14663_14664_14665_14666_14667_14668_14669_14670_14671_14672_14673_14674_14675_14676_14677_14678_14679_14680_14681_14682_14683_14684_14685_14686_14687_14688_14689_14690_14691_14692_14693_14694_14695_14696_14697_14698_14699_14700_14701_14702_14703_14704_14705_14706_14707_14708_14709_14710_14711_14712_14713_14714_14715_14716_14717_14718_14719_14720_14721_14722_14723_14724_14725_14726_14727_14728_14729_14730_14731_14732_14733_14734_14735_14736_14737_14738_14739_14740_14741_14742_14743_14744_14745_14746_14747_14748_14749_14750_14751_14752_14753_14754_14755_14756_14757_14758_14759_14760_14761_14762_14763_14764_14765_14766_14767_14768_14769_14770_14771_14772_14773_14774_14775_14776_14777_14778_14779_14780_14781_14782_14783_14784_14785_14786_14787_14788_14789_14790_14791_14792_14793_14794_14795_14796_14797_14798_14799_14800_14801_14802_14803_14804_14805_14806_14807_14808_14809_14810_14811_14812_14813_14814_14815_14816_14817_14818_14819_14820_14821_14822_14823_14824_14825_14826_14827_14828_14829_14830_14831_14832_14833_14834_14835_14836_14837_14838_14839_14840_14841_14842_14843_14844_14845_14846_14847_14848_14849_14850_14851_14852_14853_14854_14855_14856_14857_14858_14859_14860_14861_14862_14863_14864_14865_14866_14867_14868_14869_14870_14871_14872_14873_14874_14875_14876_14877_14878_14879_14880_14881_14882_14883_14884_14885_14886_14887_14888_14889_14890_14891_14892_14893_14894_14895_14896_14897_14898_14899_14900_14901_14902_14903_14904_14905_14906_14907_14908_14909_14910_14911_14912_14913_14914_14915_14916_14917_14918_14919_14920_14921_14922_14923_14924_14925_14926_14927_14928_14929_14930_14931_14932_14933_14934_14935_14936_14937_14938_14939_14940_14941_14942_14943_14944_14945_14946_14947_14948_14949_14950_14951_14952_14953_14954_14955_14956_14957_14958_14959_14960_14961_14962_14963_14964_14965_14966_14967_14968_14969_14970_14971_14972_14973_14974_14975_14976_14977_14978_14979_14980_14981_14982_14983_14984_14985_14986_14987_14988_14989_14990_14991_14992_14993_14994_14995_14996_14997_14998_14999_15000_15001_15002_15003_15004_15005_15006_15007_15008_15009_15010_15011_15012_15013_15014_15015_15016_15017_15018_15019_15020_15021_15022_15023_15024_15025_15026_15027_15028_15029_15030_15031_15032_15033_15034_15035_15036_15037_15038_15039_15040_15041_15042_15043_15044_15045_15046_15047_15048_15049_15050_15051_15052_15053_15054_15055_15056_15057_15058_15059_15060_15061_15062_15063_15064_15065_15066_15067_15068_15069_15070_15071_15072_15073_15074_15075_15076_15077_15078_15079_15080_15081_15082_15083_15084_15085_15086_15087_15088_15089_15090_15091_15092_15093_15094_15095_15096_15097_15098_15099_15100_15101_15102_15103_15104_15105_15106_15107_15108_15109_15110_15111_15112_15113_15114_15115_15116_15117_15118_15119_15120_15121_15122_15123_15124_15125_15126_15127_15128_15129_15130_15131_15132_15133_15134_15135_15136_15137_15138_15139_15140_15141_15142_15143_15144_15145_15146_15147_15148_15149_15150_15151_15152_15153_15154_15155_15156_15157_15158_15159_15160_15161_15162_15163_15164_15165_15166_15167_15168_15169_15170_15171_15172_15173_15174_15175_15176_15177_15178_15179_15180_15181_15182_15183_15184_15185_15186_15187_15188_15189_15190_15191_15192_15193_15194_15195_15196_15197_15198_15199_15200_15201_15202_15203_15204_15205_15206_15207_15208_15209_15210_15211_15212_15213_15214_15215_15216_15217_15218_15219_15220_15221_15222_15223_15224_15225_15226_15227_15228_15229_15230_15231_15232_15233_15234_15235_15236_15237_15238_15239_15240_15241_15242_15243_15244_15245_15246_15247_15248_15249_15250_15251_15252_15253_15254_15255_15256_15257_15258_15259_15260_15261_15262_15263_15264_15265_15266_15267_15268_15269_15270_15271_15272_15273_15274_15275_15276_15277_15278_15279_15280_15281_15282_15283_15284_15285_15286_15287_15288_15289_15290_15291_15292_15293_15294_15295_15296_15297_15298_15299_15300_15301_15302_15303_15304_15305_15306_15307_15308_15309_15310_15311_15312_15313_15314_15315_15316_15317_15318_15319_15320_15321_15322_15323_15324_15325_15326_15327_15328_15329_15330_15331_15332_15333_15334_15335_15336_15337_15338_15339_15340_15341_15342_15343_15344_15345_15346_15347_15348_15349_15350_15351_15352_15353_15354_15355_15356_15357_15358_15359_15360_15361_15362_15363_15364_15365_15366_15367_15368_15369_15370_15371_15372_15373_15374_15375_15376_15377_15378_15379_15380_15381_15382_15383_15384_15385_15386_15387_15388_15389_15390_15391_15392_15393_15394_15395_15396_15397_15398_15399_15400_15401_15402_15403_15404_15405_15406_15407_15408_15409_15410_15411_15412_15413_15414_15415_15416_15417_15418_15419_15420_15421_15422_15423_15424_15425_15426_15427_15428_15429_15430_15431_15432_15433_15434_15435_15436_15437_15438_15439_15440_15441_15442_15443_15444_15445_15446_15447_15448_15449_15450_15451_15452_15453_15454_15455_15456_15457_15458_15459_15460_15461_15462_15463_15464_15465_15466_15467_15468_15469_15470_15471_15472_15473_15474_15475_15476_15477_15478_15479_15480_15481_15482_15483_15484_15485_15486_15487_15488_15489_15490_15491_15492_15493_15494_15495_15496_15497_15498_15499_15500_15501_15502_15503_15504_15505_15506_15507_15508_15509_15510_15511_15512_15513_15514_15515_15516_15517_15518_15519_15520_15521_15522_15523_15524_15525_15526_15527_15528_15529_15530_15531_15532_15533_15534_15535_15536_15537_15538_15539_15540_15541_15542_15543_15544_15545_15546_15547_15548_15549_15550_15551_15552_15553_15554_15555_15556_15557_15558_15559_15560_15561_15562_15563_15564_15565_15566_15567_15568_15569_15570_15571_15572_15573_15574_15575_15576_15577_15578_15579_15580_15581_15582_15583_15584_15585_15586_15587_15588_15589_15590_15591_15592_15593_15594_15595_15596_15597_15598_15599_15600_15601_15602_15603_15604_15605_15606_15607_15608_15609_15610_15611_15612_15613_15614_15615_15616_15617_15618_15619_15620_15621_15622_15623_15624_15625_15626_15627_15628_15629_15630_15631_15632_15633_15634_15635_15636_15637_15638_15639_15640_15641_15642_15643_15644_15645_15646_15647_15648_15649_15650_15651_15652_15653_15654_15655_15656_15657_15658_15659_15660_15661_15662_15663_15664_15665_15666_15667_15668_15669_15670_15671_15672_15673_15674_15675_15676_15677_15678_15679_15680_15681_15682_15683_15684_15685_15686_15687_15688_15689_15690_15691_15692_15693_15694_15695_15696_15697_15698_15699_15700_15701_15702_15703_15704_15705_15706_15707_15708_15709_15710_15711_15712_15713_15714_15715_15716_15717_15718_15719_15720_15721_15722_15723_15724_15725_15726_15727_15728_15729_15730_15731_15732_15733_15734_15735_15736_15737_15738_15739_15740_15741_15742_15743_15744_15745_15746_15747_15748_15749_15750_15751_15752_15753_15754_15755_15756_15757_15758_15759_15760_15761_15762_15763_15764_15765_15766_15767_15768_15769_15770_15771_15772_15773_15774_15775_15776_15777_15778_15779_15780_15781_15782_15783_15784_15785_15786_15787_15788_15789_15790_15791_15792_15793_15794_15795_15796_15797_15798_15799_15800_15801_15802_15803_15804_15805_15806_15807_15808_15809_15810_15811_15812_15813_15814_15815_15816_15817_15818_15819_15820_15821_15822_15823_15824_15825_15826_15827_15828_15829_15830_15831_15832_15833_15834_15835_15836_15837_15838_15839_15840_15841_15842_15843_15844_15845_15846_15847_15848_15849_15850_15851_15852_15853_15854_15855_15856_15857_15858_15859_15860_15861_15862_15863_15864_15865_15866_15867_15868_15869_15870_15871_15872_15873_15874_15875_15876_15877_15878_15879_15880_15881_15882_15883_15884_15885_15886_15887_15888_15889_15890_15891_15892_15893_15894_15895_15896_15897_15898_15899_15900_15901_15902_15903_15904_15905_15906_15907_15908_15909_15910_15911_15912_15913_15914_15915_15916_15917_15918_15919_15920_15921_15922_15923_15924_15925_15926_15927_15928_15929_15930_15931_15932_15933_15934_15935_15936_15937_15938_15939_15940_15941_15942_15943_15944_15945_15946_15947_15948_15949_15950_15951_15952_15953_15954_15955_15956_15957_15958_15959_15960_15961_15962_15963_15964_15965_15966_15967_15968_15969_15970_15971_15972_15973_15974_15975_15976_15977_15978_15979_15980_15981_15982_15983_15984_15985_15986_15987_15988_15989_15990_15991_15992_15993_15994_15995_15996_15997_15998_15999_16000_16001_16002_16003_16004_16005_16006_16007_16008_16009_16010_16011_16012_16013_16014_16015_16016_16017_16018_16019_16020_16021_16022_16023_16024_16025_16026_16027_16028_16029_16030_16031_16032_16033_16034_16035_16036_16037_16038_16039_16040_16041_16042_16043_16044_16045_16046_16047_16048_16049_16050_16051_16052_16053_16054_16055_16056_16057_16058_16059_16060_16061_16062_16063_16064_16065_16066_16067_16068_16069_16070_16071_16072_16073_16074_16075_16076_16077_16078_16079_16080_16081_16082_16083_16084_16085_16086_16087_16088_16089_16090_16091_16092_16093_16094_16095_16096_16097_16098_16099_16100_16101_16102_16103_16104_16105_16106_16107_16108_16109_16110_16111_16112_16113_16114_16115_16116_16117_16118_16119_16120_16121_16122_16123_16124_16125_16126_16127_16128_16129_16130_16131_16132_16133_16134_16135_16136_16137_16138_16139_16140_16141_16142_16143_16144_16145_16146_16147_16148_16149_16150_16151_16152_16153_16154_16155_16156_16157_16158_16159_16160_16161_16162_16163_16164_16165_16166_16167_16168_16169_16170_16171_16172_16173_16174_16175_16176_16177_16178_16179_16180_16181_16182_16183_16184_16185_16186_16187_16188_16189_16190_16191_16192_16193_16194_16195_16196_16197_16198_16199_16200_16201_16202_16203_16204_16205_16206_16207_16208_16209_16210_16211_16212_16213_16214_16215_16216_16217_16218_16219_16220_16221_16222_16223_16224_16225_16226_16227_16228_16229_16230_16231_16232_16233_16234_16235_16236_16237_16238_16239_16240_16241_16242_16243_16244_16245_16246_16247_16248_16249_16250_16251_16252_16253_16254_16255_16256_16257_16258_16259_16260_16261_16262_16263_16264_16265_16266_16267_16268_16269_16270_16271_16272_16273_16274_16275_16276_16277_16278_16279_16280_16281_16282_16283_16284_16285_16286_16287_16288_16289_16290_16291_16292_16293_16294_16295_16296_16297_16298_16299_16300_16301_16302_16303_16304_16305_16306_16307_16308_16309_16310_16311_16312_16313_16314_16315_16316_16317_16318_16319_16320_16321_16322_16323_16324_16325_16326_16327_16328_16329_16330_16331_16332_16333_16334_16335_16336_16337_16338_16339_16340_16341_16342_16343_16344_16345_16346_16347_16348_16349_16350_16351_16352_16353_16354_16355_16356_16357_16358_16359_16360_16361_16362_16363_16364_16365_16366_16367_16368_16369_16370_16371_16372_16373_16374_16375_16376_16377_16378_16379_16380_16381_16382_16383_16384_16385_16386_16387_16388_16389_16390_16391_16392_16393_16394_16395_16396_16397_16398_16399_16400_16401_16402_16403_16404_16405_16406_16407_16408_16409_16410_16411_16412_16413_16414_16415_16416_16417_16418_16419_16420_16421_16422_16423_16424_16425_16426_16427_16428_16429_16430_16431_16432_16433_16434_16435_16436_16437_16438_16439_16440_16441_16442_16443_16444_16445_16446_16447_16448_16449_16450_16451_16452_16453_16454_16455_16456_16457_16458_16459_16460_16461_16462_16463_16464_16465_16466_16467_16468_16469_16470_16471_16472_16473_16474_16475_16476_16477_16478_16479_16480_16481_16482_16483_16484_16485_16486_16487_16488_16489_16490_16491_16492_16493_16494_16495_16496_16497_16498_16499_16500_16501_16502_16503_16504_16505_16506_16507_16508_16509_16510_16511_16512_16513_16514_16515_16516_16517_16518_16519_16520_16521_16522_16523_16524_16525_16526_16527_16528_16529_16530_16531_16532_16533_16534_16535_16536_16537_16538_16539_16540_16541_16542_16543_16544_16545_16546_16547_16548_16549_16550_16551_16552_16553_16554_16555_16556_16557_16558_16559_16560_16561_16562_16563_16564_16565_16566_16567_16568_16569_16570_16571_16572_16573_16574_16575_16576_16577_16578_16579_16580_16581_16582_16583_16584_16585_16586_16587_16588_16589_16590_16591_16592_16593_16594_16595_16596_16597_16598_16599_16600_16601_16602_16603_16604_16605_16606_16607_16608_16609_16610_16611_16612_16613_16614_16615_16616_16617_16618_16619_16620_16621_16622_16623_16624_16625_16626_16627_16628_16629_16630_16631_16632_16633_16634_16635_16636_16637_16638_16639_16640_16641_16642_16643_16644_16645_16646_16647_16648_16649_16650_16651_16652_16653_16654_16655_16656_16657_16658_16659_16660_16661_16662_16663_16664_16665_16666_16667_16668_16669_16670_16671_16672_16673_16674_16675_16676_16677_16678_16679_16680_16681_16682_16683_16684_16685_16686_16687_16688_16689_16690_16691_16692_16693_16694_16695_16696_16697_16698_16699_16700_16701_16702_16703_16704_16705_16706_16707_16708_16709_16710_16711_16712_16713_16714_16715_16716_16717_16718_16719_16720_16721_16722_16723_16724_16725_16726_16727_16728_16729_16730_16731_16732_16733_16734_16735_16736_16737_16738_16739_16740_16741_16742_16743_16744_16745_16746_16747_16748_16749_16750_16751_16752_16753_16754_16755_16756_16757_16758_16759_16760_16761_16762_16763_16764_16765_16766_16767_16768_16769_16770_16771_16772_16773_16774_16775_16776_16777_16778_16779_16780_16781_16782_16783_16784_16785_16786_16787_16788_16789_16790_16791_16792_16793_16794_16795_16796_16797_16798_16799_16800_16801_16802_16803_16804_16805_16806_16807_16808_16809_16810_16811_16812_16813_16814_16815_16816_16817_16818_16819_16820_16821_16822_16823_16824_16825_16826_16827_16828_16829_16830_16831_16832_16833_16834_16835_16836_16837_16838_16839_16840_16841_16842_16843_16844_16845_16846_16847_16848_16849_16850_16851_16852_16853_16854_16855_16856_16857_16858_16859_16860_16861_16862_16863_16864_16865_16866_16867_16868_16869_16870_16871_16872_16873_16874_16875_16876_16877_16878_16879_16880_16881_16882_16883_16884_16885_16886_16887_16888_16889_16890_16891_16892_16893_16894_16895_16896_16897_16898_16899_16900_16901_16902_16903_16904_16905_16906_16907_16908_16909_16910_16911_16912_16913_16914_16915_16916_16917_16918_16919_16920_16921_16922_16923_16924_16925_16926_16927_16928_16929_16930_16931_16932_16933_16934_16935_16936_16937_16938_16939_16940_16941_16942_16943_16944_16945_16946_16947_16948_16949_16950_16951_16952_16953_16954_16955_16956_16957_16958_16959_16960_16961_16962_16963_16964_16965_16966_16967_16968_16969_16970_16971_16972_16973_16974_16975_16976_16977_16978_16979_16980_16981_16982_16983_16984_16985_16986_16987_16988_16989_16990_16991_16992_16993_16994_16995_16996_16997_16998_16999_17000_17001_17002_17003_17004_17005_17006_17007_17008_17009_17010_17011_17012_17013_17014_17015_17016_17017_17018_17019_17020_17021_17022_17023_17024_17025_17026_17027_17028_17029_17030_17031_17032_17033_17034_17035_17036_17037_17038_17039_17040_17041_17042_17043_17044_17045_17046_17047_17048_17049_17050_17051_17052_17053_17054_17055_17056_17057_17058_17059_17060_17061_17062_17063_17064_17065_17066_17067_17068_17069_17070_17071_17072_17073_17074_17075_17076_17077_17078_17079_17080_17081_17082_17083_17084_17085_17086_17087_17088_17089_17090_17091_17092_17093_17094_17095_17096_17097_17098_17099_17100_17101_17102_17103_17104_17105_17106_17107_17108_17109_17110_17111_17112_17113_17114_17115_17116_17117_17118_17119_17120_17121_17122_17123_17124_17125_17126_17127_17128_17129_17130_17131_17132_17133_17134_17135_17136_17137_17138_17139_17140_17141_17142_17143_17144_17145_17146_17147_17148_17149_17150_17151_17152_17153_17154_17155_17156_17157_17158_17159_17160_17161_17162_17163_17164_17165_17166_17167_17168_17169_17170_17171_17172_17173_17174_17175_17176_17177_17178_17179_17180_17181_17182_17183_17184_17185_17186_17187_17188_17189_17190_17191_17192_17193_17194_17195_17196_17197_17198_17199_17200_17201_17202_17203_17204_17205_17206_17207_17208_17209_17210_17211_17212_17213_17214_17215_17216_17217_17218_17219_17220_17221_17222_17223_17224_17225_17226_17227_17228_17229_17230_17231_17232_17233_17234_17235_17236_17237_17238_17239_17240_17241_17242_17243_17244_17245_17246_17247_17248_17249_17250_17251_17252_17253_17254_17255_17256_17257_17258_17259_17260_17261_17262_17263_17264_17265_17266_17267_17268_17269_17270_17271_17272_17273_17274_17275_17276_17277_17278_17279_17280_17281_17282_17283_17284_17285_17286_17287_17288_17289_17290_17291_17292_17293_17294_17295_17296_17297_17298_17299_17300_17301_17302_17303_17304_17305_17306_17307_17308_17309_17310_17311_17312_17313_17314_17315_17316_17317_17318_17319_17320_17321_17322_17323_17324_17325_17326_17327_17328_17329_17330_17331_17332_17333_17334_17335_17336_17337_17338_17339_17340_17341_17342_17343_17344_17345_17346_17347_17348_17349_17350_17351_17352_17353_17354_17355_17356_17357_17358_17359_17360_17361_17362_17363_17364_17365_17366_17367_17368_17369_17370_17371_17372_17373_17374_17375_17376_17377_17378_17379_17380_17381_17382_17383_17384_17385_17386_17387_17388_17389_17390_17391_17392_17393_17394_17395_17396_17397_17398_17399_17400_17401_17402_17403_17404_17405_17406_17407_17408_17409_17410_17411_17412_17413_17414_17415_17416_17417_17418_17419_17420_17421_17422_17423_17424_17425_17426_17427_17428_17429_17430_17431_17432_17433_17434_17435_17436_17437_17438_17439_17440_17441_17442_17443_17444_17445_17446_17447_17448_17449_17450_17451_17452_17453_17454_17455_17456_17457_17458_17459_17460_17461_17462_17463_17464_17465_17466_17467_17468_17469_17470_17471_17472_17473_17474_17475_17476_17477_17478_17479_17480_17481_17482_17483_17484_17485_17486_17487_17488_17489_17490_17491_17492_17493_17494_17495_17496_17497_17498_17499_17500_17501_17502_17503_17504_17505_17506_17507_17508_17509_17510_17511_17512_17513_17514_17515_17516_17517_17518_17519_17520_17521_17522_17523_17524_17525_17526_17527_17528_17529_17530_17531_17532_17533_17534_17535_17536_17537_17538_17539_17540_17541_17542_17543_17544_17545_17546_17547_17548_17549_17550_17551_17552_17553_17554_17555_17556_17557_17558_17559_17560_17561_17562_17563_17564_17565_17566_17567_17568_17569_17570_17571_17572_17573_17574_17575_17576_17577_17578_17579_17580_17581_17582_17583_17584_17585_17586_17587_17588_17589_17590_17591_17592_17593_17594_17595_17596_17597_17598_17599_17600_17601_17602_17603_17604_17605_17606_17607_17608_17609_17610_17611_17612_17613_17614_17615_17616_17617_17618_17619_17620_17621_17622_17623_17624_17625_17626_17627_17628_17629_17630_17631_17632_17633_17634_17635_17636_17637_17638_17639_17640_17641_17642_17643_17644_17645_17646_17647_17648_17649_17650_17651_17652_17653_17654_17655_17656_17657_17658_17659_17660_17661_17662_17663_17664_17665_17666_17667_17668_17669_17670_17671_17672_17673_17674_17675_17676_17677_17678_17679_17680_17681_17682_17683_17684_17685_17686_17687_17688_17689_17690_17691_17692_17693_17694_17695_17696_17697_17698_17699_17700_17701_17702_17703_17704_17705_17706_17707_17708_17709_17710_17711_17712_17713_17714_17715_17716_17717_17718_17719_17720_17721_17722_17723_17724_17725_17726_17727_17728_17729_17730_17731_17732_17733_17734_17735_17736_17737_17738_17739_17740_17741_17742_17743_17744_17745_17746_17747_17748_17749_17750_17751_17752_17753_17754_17755_17756_17757_17758_17759_17760_17761_17762_17763_17764_17765_17766_17767_17768_17769_17770_17771_17772_17773_17774_17775_17776_17777_17778_17779_17780_17781_17782_17783_17784_17785_17786_17787_17788_17789_17790_17791_17792_17793_17794_17795_17796_17797_17798_17799_17800_17801_17802_17803_17804_17805_17806_17807_17808_17809_17810_17811_17812_17813_17814_17815_17816_17817_17818_17819_17820_17821_17822_17823_17824_17825_17826_17827_17828_17829_17830_17831_17832_17833_17834_17835_17836_17837_17838_17839_17840_17841_17842_17843_17844_17845_17846_17847_17848_17849_17850_17851_17852_17853_17854_17855_17856_17857_17858_17859_17860_17861_17862_17863_17864_17865_17866_17867_17868_17869_17870_17871_17872_17873_17874_17875_17876_17877_17878_17879_17880_17881_17882_17883_17884_17885_17886_17887_17888_17889_17890_17891_17892_17893_17894_17895_17896_17897_17898_17899_17900_17901_17902_17903_17904_17905_17906_17907_17908_17909_17910_17911_17912_17913_17914_17915_17916_17917_17918_17919_17920_17921_17922_17923_17924_17925_17926_17927_17928_17929_17930_17931_17932_17933_17934_17935_17936_17937_17938_17939_17940_17941_17942_17943_17944_17945_17946_17947_17948_17949_17950_17951_17952_17953_17954_17955_17956_17957_17958_17959_17960_17961_17962_17963_17964_17965_17966_17967_17968_17969_17970_17971_17972_17973_17974_17975_17976_17977_17978_17979_17980_17981_17982_17983_17984_17985_17986_17987_17988_17989_17990_17991_17992_17993_17994_17995_17996_17997_17998_17999_18000_18001_18002_18003_18004_18005_18006_18007_18008_18009_18010_18011_18012_18013_18014_18015_18016_18017_18018_18019_18020_18021_18022_18023_18024_18025_18026_18027_18028_18029_18030_18031_18032_18033_18034_18035_18036_18037_18038_18039_18040_18041_18042_18043_18044_18045_18046_18047_18048_18049_18050_18051_18052_18053_18054_18055_18056_18057_18058_18059_18060_18061_18062_18063_18064_18065_18066_18067_18068_18069_18070_18071_18072_18073_18074_18075_18076_18077_18078_18079_18080_18081_18082_18083_18084_18085_18086_18087_18088_18089_18090_18091_18092_18093_18094_18095_18096_18097_18098_18099_18100_18101_18102_18103_18104_18105_18106_18107_18108_18109_18110_18111_18112_18113_18114_18115_18116_18117_18118_18119_18120_18121_18122_18123_18124_18125_18126_18127_18128_18129_18130_18131_18132_18133_18134_18135_18136_18137_18138_18139_18140_18141_18142_18143_18144_18145_18146_18147_18148_18149_18150_18151_18152_18153_18154_18155_18156_18157_18158_18159_18160_18161_18162_18163_18164_18165_18166_18167_18168_18169_18170_18171_18172_18173_18174_18175_18176_18177_18178_18179_18180_18181_18182_18183_18184_18185_18186_18187_18188_18189_18190_18191_18192_18193_18194_18195_18196_18197_18198_18199_18200_18201_18202_18203_18204_18205_18206_18207_18208_18209_18210_18211_18212_18213_18214_18215_18216_18217_18218_18219_18220_18221_18222_18223_18224_18225_18226_18227_18228_18229_18230_18231_18232_18233_18234_18235_18236_18237_18238_18239_18240_18241_18242_18243_18244_18245_18246_18247_18248_18249_18250_18251_18252_18253_18254_18255_18256_18257_18258_18259_18260_18261_18262_18263_18264_18265_18266_18267_18268_18269_18270_18271_18272_18273_18274_18275_18276_18277_18278_18279_18280_18281_18282_18283_18284_18285_18286_18287_18288_18289_18290_18291_18292_18293_18294_18295_18296_18297_18298_18299_18300_18301_18302_18303_18304_18305_18306_18307_18308_18309_18310_18311_18312_18313_18314_18315_18316_18317_18318_18319_18320_18321_18322_18323_18324_18325_18326_18327_18328_18329_18330_18331_18332_18333_18334_18335_18336_18337_18338_18339_18340_18341_18342_18343_18344_18345_18346_18347_18348_18349_18350_18351_18352_18353_18354_18355_18356_18357_18358_18359_18360_18361_18362_18363_18364_18365_18366_18367_18368_18369_18370_18371_18372_18373_18374_18375_18376_18377_18378_18379_18380_18381_18382_18383_18384_18385_18386_18387_18388_18389_18390_18391_18392_18393_18394_18395_18396_18397_18398_18399_18400_18401_18402_18403_18404_18405_18406_18407_18408_18409_18410_18411_18412_18413_18414_18415_18416_18417_18418_18419_18420_18421_18422_18423_18424_18425_18426_18427_18428_18429_18430_18431_18432_18433_18434_18435_18436_18437_18438_18439_18440_18441_18442_18443_18444_18445_18446_18447_18448_18449_18450_18451_18452_18453_18454_18455_18456_18457_18458_18459_18460_18461_18462_18463_18464_18465_18466_18467_18468_18469_18470_18471_18472_18473_18474_18475_18476_18477_18478_18479_18480_18481_18482_18483_18484_18485_18486_18487_18488_18489_18490_18491_18492_18493_18494_18495_18496_18497_18498_18499_18500_18501_18502_18503_18504_18505_18506_18507_18508_18509_18510_18511_18512_18513_18514_18515_18516_18517_18518_18519_18520_18521_18522_18523_18524_18525_18526_18527_18528_18529_18530_18531_18532_18533_18534_18535_18536_18537_18538_18539_18540_18541_18542_18543_18544_18545_18546_18547_18548_18549_18550_18551_18552_18553_18554_18555_18556_18557_18558_18559_18560_18561_18562_18563_18564_18565_18566_18567_18568_18569_18570_18571_18572_18573_18574_18575_18576_18577_18578_18579_18580_18581_18582_18583_18584_18585_18586_18587_18588_18589_18590_18591_18592_18593_18594_18595_18596_18597_18598_18599_18600_18601_18602_18603_18604_18605_18606_18607_18608_18609_18610_18611_18612_18613_18614_18615_18616_18617_18618_18619_18620_18621_18622_18623_18624_18625_18626_18627_18628_18629_18630_18631_18632_18633_18634_18635_18636_18637_18638_18639_18640_18641_18642_18643_18644_18645_18646_18647_18648_18649_18650_18651_18652_18653_18654_18655_18656_18657_18658_18659_18660_18661_18662_18663_18664_18665_18666_18667_18668_18669_18670_18671_18672_18673_18674_18675_18676_18677_18678_18679_18680_18681_18682_18683_18684_18685_18686_18687_18688_18689_18690_18691_18692_18693_18694_18695_18696_18697_18698_18699_18700_18701_18702_18703_18704_18705_18706_18707_18708_18709_18710_18711_18712_18713_18714_18715_18716_18717_18718_18719_18720_18721_18722_18723_18724_18725_18726_18727_18728_18729_18730_18731_18732_18733_18734_18735_18736_18737_18738_18739_18740_18741_18742_18743_18744_18745_18746_18747_18748_18749_18750_18751_18752_18753_18754_18755_18756_18757_18758_18759_18760_18761_18762_18763_18764_18765_18766_18767_18768_18769_18770_18771_18772_18773_18774_18775_18776_18777_18778_18779_18780_18781_18782_18783_18784_18785_18786_18787_18788_18789_18790_18791_18792_18793_18794_18795_18796_18797_18798_18799_18800_18801_18802_18803_18804_18805_18806_18807_18808_18809_18810_18811_18812_18813_18814_18815_18816_18817_18818_18819_18820_18821_18822_18823_18824_18825_18826_18827_18828_18829_18830_18831_18832_18833_18834_18835_18836_18837_18838_18839_18840_18841_18842_18843_18844_18845_18846_18847_18848_18849_18850_18851_18852_18853_18854_18855_18856_18857_18858_18859_18860_18861_18862_18863_18864_18865_18866_18867_18868_18869_18870_18871_18872_18873_18874_18875_18876_18877_18878_18879_18880_18881_18882_18883_18884_18885_18886_18887_18888_18889_18890_18891_18892_18893_18894_18895_18896_18897_18898_18899_18900_18901_18902_18903_18904_18905_18906_18907_18908_18909_18910_18911_18912_18913_18914_18915_18916_18917_18918_18919_18920_18921_18922_18923_18924_18925_18926_18927_18928_18929_18930_18931_18932_18933_18934_18935_18936_18937_18938_18939_18940_18941_18942_18943_18944_18945_18946_18947_18948_18949_18950_18951_18952_18953_18954_18955_18956_18957_18958_18959_18960_18961_18962_18963_18964_18965_18966_18967_18968_18969_18970_18971_18972_18973_18974_18975_18976_18977_18978_18979_18980_18981_18982_18983_18984_18985_18986_18987_18988_18989_18990_18991_18992_18993_18994_18995_18996_18997_18998_18999_19000_19001_19002_19003_19004_19005_19006_19007_19008_19009_19010_19011_19012_19013_19014_19015_19016_19017_19018_19019_19020_19021_19022_19023_19024_19025_19026_19027_19028_19029_19030_19031_19032_19033_19034_19035_19036_19037_19038_19039_19040_19041_19042_19043_19044_19045_19046_19047_19048_19049_19050_19051_19052_19053_19054_19055_19056_19057_19058_19059_19060_19061_19062_19063_19064_19065_19066_19067_19068_19069_19070_19071_19072_19073_19074_19075_19076_19077_19078_19079_19080_19081_19082_19083_19084_19085_19086_19087_19088_19089_19090_19091_19092_19093_19094_19095_19096_19097_19098_19099_19100_19101_19102_19103_19104_19105_19106_19107_19108_19109_19110_19111_19112_19113_19114_19115_19116_19117_19118_19119_19120_19121_19122_19123_19124_19125_19126_19127_19128_19129_19130_19131_19132_19133_19134_19135_19136_19137_19138_19139_19140_19141_19142_19143_19144_19145_19146_19147_19148_19149_19150_19151_19152_19153_19154_19155_19156_19157_19158_19159_19160_19161_19162_19163_19164_19165_19166_19167_19168_19169_19170_19171_19172_19173_19174_19175_19176_19177_19178_19179_19180_19181_19182_19183_19184_19185_19186_19187_19188_19189_19190_19191_19192_19193_19194_19195_19196_19197_19198_19199_19200_19201_19202_19203_19204_19205_19206_19207_19208_19209_19210_19211_19212_19213_19214_19215_19216_19217_19218_19219_19220_19221_19222_19223_19224_19225_19226_19227_19228_19229_19230_19231_19232_19233_19234_19235_19236_19237_19238_19239_19240_19241_19242_19243_19244_19245_19246_19247_19248_19249_19250_19251_19252_19253_19254_19255_19256_19257_19258_19259_19260_19261_19262_19263_19264_19265_19266_19267_19268_19269_19270_19271_19272_19273_19274_19275_19276_19277_19278_19279_19280_19281_19282_19283_19284_19285_19286_19287_19288_19289_19290_19291_19292_19293_19294_19295_19296_19297_19298_19299_19300_19301_19302_19303_19304_19305_19306_19307_19308_19309_19310_19311_19312_19313_19314_19315_19316_19317_19318_19319_19320_19321_19322_19323_19324_19325_19326_19327_19328_19329_19330_19331_19332_19333_19334_19335_19336_19337_19338_19339_19340_19341_19342_19343_19344_19345_19346_19347_19348_19349_19350_19351_19352_19353_19354_19355_19356_19357_19358_19359_19360_19361_19362_19363_19364_19365_19366_19367_19368_19369_19370_19371_19372_19373_19374_19375_19376_19377_19378_19379_19380_19381_19382_19383_19384_19385_19386_19387_19388_19389_19390_19391_19392_19393_19394_19395_19396_19397_19398_19399_19400_19401_19402_19403_19404_19405_19406_19407_19408_19409_19410_19411_19412_19413_19414_19415_19416_19417_19418_19419_19420_19421_19422_19423_19424_19425_19426_19427_19428_19429_19430_19431_19432_19433_19434_19435_19436_19437_19438_19439_19440_19441_19442_19443_19444_19445_19446_19447_19448_19449_19450_19451_19452_19453_19454_19455_19456_19457_19458_19459_19460_19461_19462_19463_19464_19465_19466_19467_19468_19469_19470_19471_19472_19473_19474_19475_19476_19477_19478_19479_19480_19481_19482_19483_19484_19485_19486_19487_19488_19489_19490_19491_19492_19493_19494_19495_19496_19497_19498_19499_19500_19501_19502_19503_19504_19505_19506_19507_19508_19509_19510_19511_19512_19513_19514_19515_19516_19517_19518_19519_19520_19521_19522_19523_19524_19525_19526_19527_19528_19529_19530_19531_19532_19533_19534_19535_19536_19537_19538_19539_19540_19541_19542_19543_19544_19545_19546_19547_19548_19549_19550_19551_19552_19553_19554_19555_19556_19557_19558_19559_19560_19561_19562_19563_19564_19565_19566_19567_19568_19569_19570_19571_19572_19573_19574_19575_19576_19577_19578_19579_19580_19581_19582_19583_19584_19585_19586_19587_19588_19589_19590_19591_19592_19593_19594_19595_19596_19597_19598_19599_19600_19601_19602_19603_19604_19605_19606_19607_19608_19609_19610_19611_19612_19613_19614_19615_19616_19617_19618_19619_19620_19621_19622_19623_19624_19625_19626_19627_19628_19629_19630_19631_19632_19633_19634_19635_19636_19637_19638_19639_19640_19641_19642_19643_19644_19645_19646_19647_19648_19649_19650_19651_19652_19653_19654_19655_19656_19657_19658_19659_19660_19661_19662_19663_19664_19665_19666_19667_19668_19669_19670_19671_19672_19673_19674_19675_19676_19677_19678_19679_19680_19681_19682_19683_19684_19685_19686_19687_19688_19689_19690_19691_19692_19693_19694_19695_19696_19697_19698_19699_19700_19701_19702_19703_19704_19705_19706_19707_19708_19709_19710_19711_19712_19713_19714_19715_19716_19717_19718_19719_19720_19721_19722_19723_19724_19725_19726_19727_19728_19729_19730_19731_19732_19733_19734_19735_19736_19737_19738_19739_19740_19741_19742_19743_19744_19745_19746_19747_19748_19749_19750_19751_19752_19753_19754_19755_19756_19757_19758_19759_19760_19761_19762_19763_19764_19765_19766_19767_19768_19769_19770_19771_19772_19773_19774_19775_19776_19777_19778_19779_19780_19781_19782_19783_19784_19785_19786_19787_19788_19789_19790_19791_19792_19793_19794_19795_19796_19797_19798_19799_19800_19801_19802_19803_19804_19805_19806_19807_19808_19809_19810_19811_19812_19813_19814_19815_19816_19817_19818_19819_19820_19821_19822_19823_19824_19825_19826_19827_19828_19829_19830_19831_19832_19833_19834_19835_19836_19837_19838_19839_19840_19841_19842_19843_19844_19845_19846_19847_19848_19849_19850_19851_19852_19853_19854_19855_19856_19857_19858_19859_19860_19861_19862_19863_19864_19865_19866_19867_19868_19869_19870_19871_19872_19873_19874_19875_19876_19877_19878_19879_19880_19881_19882_19883_19884_19885_19886_19887_19888_19889_19890_19891_19892_19893_19894_19895_19896_19897_19898_19899_19900_19901_19902_19903_19904_19905_19906_19907_19908_19909_19910_19911_19912_19913_19914_19915_19916_19917_19918_19919_19920_19921_19922_19923_19924_19925_19926_19927_19928_19929_19930_19931_19932_19933_19934_19935_19936_19937_19938_19939_19940_19941_19942_19943_19944_19945_19946_19947_19948_19949_19950_19951_19952_19953_19954_19955_19956_19957_19958_19959_19960_19961_19962_19963_19964_19965_19966_19967_19968_19969_19970_19971_19972_19973_19974_19975_19976_19977_19978_19979_19980_19981_19982_19983_19984_19985_19986_19987_19988_19989_19990_19991_19992_19993_19994_19995_19996_19997_19998_19999_20000_20001_20002_20003_20004_20005_20006_20007_20008_20009_20010_20011_20012_20013_20014_20015_20016_20017_20018_20019_20020_20021_20022_20023_20024_20025_20026_20027_20028_20029_20030_20031_20032_20033_20034_20035_20036_20037_20038_20039_20040_20041_20042_20043_20044_20045_20046_20047_20048_20049_20050_20051_20052_20053_20054_20055_20056_20057_20058_20059_20060_20061_20062_20063_20064_20065_20066_20067_20068_20069_20070_20071_20072_20073_20074_20075_20076_20077_20078_20079_20080_20081_20082_20083_20084_20085_20086_20087_20088_20089_20090_20091_20092_20093_20094_20095_20096_20097_20098_20099_20100_20101_20102_20103_20104_20105_20106_20107_20108_20109_20110_20111_20112_20113_20114_20115_20116_20117_20118_20119_20120_20121_20122_20123_20124_20125_20126_20127_20128_20129_20130_20131_20132_20133_20134_20135_20136_20137_20138_20139_20140_20141_20142_20143_20144_20145_20146_20147_20148_20149_20150_20151_20152_20153_20154_20155_20156_20157_20158_20159_20160_20161_20162_20163_20164_20165_20166_20167_20168_20169_20170_20171_20172_20173_20174_20175_20176_20177_20178_20179_20180_20181_20182_20183_20184_20185_20186_20187_20188_20189_20190_20191_20192_20193_20194_20195_20196_20197_20198_20199_20200_20201_20202_20203_20204_20205_20206_20207_20208_20209_20210_20211_20212_20213_20214_20215_20216_20217_20218_20219_20220_20221_20222_20223_20224_20225_20226_20227_20228_20229_20230_20231_20232_20233_20234_20235_20236_20237_20238_20239_20240_20241_20242_20243_20244_20245_20246_20247_20248_20249_20250_20251_20252_20253_20254_20255_20256_20257_20258_20259_20260_20261_20262_20263_20264_20265_20266_20267_20268_20269_20270_20271_20272_20273_20274_20275_20276_20277_20278_20279_20280_20281_20282_20283_20284_20285_20286_20287_20288_20289_20290_20291_20292_20293_20294_20295_20296_20297_20298_20299_20300_20301_20302_20303_20304_20305_20306_20307_20308_20309_20310_20311_20312_20313_20314_20315_20316_20317_20318_20319_20320_20321_20322_20323_20324_20325_20326_20327_20328_20329_20330_20331_20332_20333_20334_20335_20336_20337_20338_20339_20340_20341_20342_20343_20344_20345_20346_20347_20348_20349_20350_20351_20352_20353_20354_20355_20356_20357_20358_20359_20360_20361_20362_20363_20364_20365_20366_20367_20368_20369_20370_20371_20372_20373_20374_20375_20376_20377_20378_20379_20380_20381_20382_20383_20384_20385_20386_20387_20388_20389_20390_20391_20392_20393_20394_20395_20396_20397_20398_20399_20400_20401_20402_20403_20404_20405_20406_20407_20408_20409_20410_20411_20412_20413_20414_20415_20416_20417_20418_20419_20420_20421_20422_20423_20424_20425_20426_20427_20428_20429_20430_20431_20432_20433_20434_20435_20436_20437_20438_20439_20440_20441_20442_20443_20444_20445_20446_20447_20448_20449_20450_20451_20452_20453_20454_20455_20456_20457_20458_20459_20460_20461_20462_20463_20464_20465_20466_20467_20468_20469_20470_20471_20472_20473_20474_20475_20476_20477_20478_20479_20480_20481_20482_20483_20484_20485_20486_20487_20488_20489_20490_20491_20492_20493_20494_20495_20496_20497_20498_20499_20500_20501_20502_20503_20504_20505_20506_20507_20508_20509_20510_20511_20512_20513_20514_20515_20516_20517_20518_20519_20520_20521_20522_20523_20524_20525_20526_20527_20528_20529_20530_20531_20532_20533_20534_20535_20536_20537_20538_20539_20540_20541_20542_20543_20544_20545_20546_20547_20548_20549_20550_20551_20552_20553_20554_20555_20556_20557_20558_20559_20560_20561_20562_20563_20564_20565_20566_20567_20568_20569_20570_20571_20572_20573_20574_20575_20576_20577_20578_20579_20580_20581_20582_20583_20584_20585_20586_20587_20588_20589_20590_20591_20592_20593_20594_20595_20596_20597_20598_20599_20600_20601_20602_20603_20604_20605_20606_20607_20608_20609_20610_20611_20612_20613_20614_20615_20616_20617_20618_20619_20620_20621_20622_20623_20624_20625_20626_20627_20628_20629_20630_20631_20632_20633_20634_20635_20636_20637_20638_20639_20640_20641_20642_20643_20644_20645_20646_20647_20648_20649_20650_20651_20652_20653_20654_20655_20656_20657_20658_20659_20660_20661_20662_20663_20664_20665_20666_20667_20668_20669_20670_20671_20672_20673_20674_20675_20676_20677_20678_20679_20680_20681_20682_20683_20684_20685_20686_20687_20688_20689_20690_20691_20692_20693_20694_20695_20696_20697_20698_20699_20700_20701_20702_20703_20704_20705_20706_20707_20708_20709_20710_20711_20712_20713_20714_20715_20716_20717_20718_20719_20720_20721_20722_20723_20724_20725_20726_20727_20728_20729_20730_20731_20732_20733_20734_20735_20736_20737_20738_20739_20740_20741_20742_20743_20744_20745_20746_20747_20748_20749_20750_20751_20752_20753_20754_20755_20756_20757_20758_20759_20760_20761_20762_20763_20764_20765_20766_20767_20768_20769_20770_20771_20772_20773_20774_20775_20776_20777_20778_20779_20780_20781_20782_20783_20784_20785_20786_20787_20788_20789_20790_20791_20792_20793_20794_20795_20796_20797_20798_20799_20800_20801_20802_20803_20804_20805_20806_20807_20808_20809_20810_20811_20812_20813_20814_20815_20816_20817_20818_20819_20820_20821_20822_20823_20824_20825_20826_20827_20828_20829_20830_20831_20832_20833_20834_20835_20836_20837_20838_20839_20840_20841_20842_20843_20844_20845_20846_20847_20848_20849_20850_20851_20852_20853_20854_20855_20856_20857_20858_20859_20860_20861_20862_20863_20864_20865_20866_20867_20868_20869_20870_20871_20872_20873_20874_20875_20876_20877_20878_20879_20880_20881_20882_20883_20884_20885_20886_20887_20888_20889_20890_20891_20892_20893_20894_20895_20896_20897_20898_20899_20900_20901_20902_20903_20904_20905_20906_20907_20908_20909_20910_20911_20912_20913_20914_20915_20916_20917_20918_20919_20920_20921_20922_20923_20924_20925_20926_20927_20928_20929_20930_20931_20932_20933_20934_20935_20936_20937_20938_20939_20940_20941_20942_20943_20944_20945_20946_20947_20948_20949_20950_20951_20952_20953_20954_20955_20956_20957_20958_20959_20960_20961_20962_20963_20964_20965_20966_20967_20968_20969_20970_20971_20972_20973_20974_20975_20976_20977_20978_20979_20980_20981_20982_20983_20984_20985_20986_20987_20988_20989_20990_20991_20992_20993_20994_20995_20996_20997_20998_20999_21000_21001_21002_21003_21004_21005_21006_21007_21008_21009_21010_21011_21012_21013_21014_21015_21016_21017_21018_21019_21020_21021_21022_21023_21024_21025_21026_21027_21028_21029_21030_21031_21032_21033_21034_21035_21036_21037_21038_21039_21040_21041_21042_21043_21044_21045_21046_21047_21048_21049_21050_21051_21052_21053_21054_21055_21056_21057_21058_21059_21060_21061_21062_21063_21064_21065_21066_21067_21068_21069_21070_21071_21072_21073_21074_21075_21076_21077_21078_21079_21080_21081_21082_21083_21084_21085_21086_21087_21088_21089_21090_21091_21092_21093_21094_21095_21096_21097_21098_21099_21100_21101_21102_21103_21104_21105_21106_21107_21108_21109_21110_21111_21112_21113_21114_21115_21116_21117_21118_21119_21120_21121_21122_21123_21124_21125_21126_21127_21128_21129_21130_21131_21132_21133_21134_21135_21136_21137_21138_21139_21140_21141_21142_21143_21144_21145_21146_21147_21148_21149_21150_21151_21152_21153_21154_21155_21156_21157_21158_21159_21160_21161_21162_21163_21164_21165_21166_21167_21168_21169_21170_21171_21172_21173_21174_21175_21176_21177_21178_21179_21180_21181_21182_21183_21184_21185_21186_21187_21188_21189_21190_21191_21192_21193_21194_21195_21196_21197_21198_21199_21200_21201_21202_21203_21204_21205_21206_21207_21208_21209_21210_21211_21212_21213_21214_21215_21216_21217_21218_21219_21220_21221_21222_21223_21224_21225_21226_21227_21228_21229_21230_21231_21232_21233_21234_21235_21236_21237_21238_21239_21240_21241_21242_21243_21244_21245_21246_21247_21248_21249_21250_21251_21252_21253_21254_21255_21256_21257_21258_21259_21260_21261_21262_21263_21264_21265_21266_21267_21268_21269_21270_21271_21272_21273_21274_21275_21276_21277_21278_21279_21280_21281_21282_21283_21284_21285_21286_21287_21288_21289_21290_21291_21292_21293_21294_21295_21296_21297_21298_21299_21300_21301_21302_21303_21304_21305_21306_21307_21308_21309_21310_21311_21312_21313_21314_21315_21316_21317_21318_21319_21320_21321_21322_21323_21324_21325_21326_21327_21328_21329_21330_21331_21332_21333_21334_21335_21336_21337_21338_21339_21340_21341_21342_21343_21344_21345_21346_21347_21348_21349_21350_21351_21352_21353_21354_21355_21356_21357_21358_21359_21360_21361_21362_21363_21364_21365_21366_21367_21368_21369_21370_21371_21372_21373_21374_21375_21376_21377_21378_21379_21380_21381_21382_21383_21384_21385_21386_21387_21388_21389_21390_21391_21392_21393_21394_21395_21396_21397_21398_21399_21400_21401_21402_21403_21404_21405_21406_21407_21408_21409_21410_21411_21412_21413_21414_21415_21416_21417_21418_21419_21420_21421_21422_21423_21424_21425_21426_21427_21428_21429_21430_21431_21432_21433_21434_21435_21436_21437_21438_21439_21440_21441_21442_21443_21444_21445_21446_21447_21448_21449_21450_21451_21452_21453_21454_21455_21456_21457_21458_21459_21460_21461_21462_21463_21464_21465_21466_21467_21468_21469_21470_21471_21472_21473_21474_21475_21476_21477_21478_21479_21480_21481_21482_21483_21484_21485_21486_21487_21488_21489_21490_21491_21492_21493_21494_21495_21496_21497_21498_21499_21500_21501_21502_21503_21504_21505_21506_21507_21508_21509_21510_21511_21512_21513_21514_21515_21516_21517_21518_21519_21520_21521_21522_21523_21524_21525_21526_21527_21528_21529_21530_21531_21532_21533_21534_21535_21536_21537_21538_21539_21540_21541_21542_21543_21544_21545_21546_21547_21548_21549_21550_21551_21552_21553_21554_21555_21556_21557_21558_21559_21560_21561_21562_21563_21564_21565_21566_21567_21568_21569_21570_21571_21572_21573_21574_21575_21576_21577_21578_21579_21580_21581_21582_21583_21584_21585_21586_21587_21588_21589_21590_21591_21592_21593_21594_21595_21596_21597_21598_21599_21600_21601_21602_21603_21604_21605_21606_21607_21608_21609_21610_21611_21612_21613_21614_21615_21616_21617_21618_21619_21620_21621_21622_21623_21624_21625_21626_21627_21628_21629_21630_21631_21632_21633_21634_21635_21636_21637_21638_21639_21640_21641_21642_21643_21644_21645_21646_21647_21648_21649_21650_21651_21652_21653_21654_21655_21656_21657_21658_21659_21660_21661_21662_21663_21664_21665_21666_21667_21668_21669_21670_21671_21672_21673_21674_21675_21676_21677_21678_21679_21680_21681_21682_21683_21684_21685_21686_21687_21688_21689_21690_21691_21692_21693_21694_21695_21696_21697_21698_21699_21700_21701_21702_21703_21704_21705_21706_21707_21708_21709_21710_21711_21712_21713_21714_21715_21716_21717_21718_21719_21720_21721_21722_21723_21724_21725_21726_21727_21728_21729_21730_21731_21732_21733_21734_21735_21736_21737_21738_21739_21740_21741_21742_21743_21744_21745_21746_21747_21748_21749_21750_21751_21752_21753_21754_21755_21756_21757_21758_21759_21760_21761_21762_21763_21764_21765_21766_21767_21768_21769_21770_21771_21772_21773_21774_21775_21776_21777_21778_21779_21780_21781_21782_21783_21784_21785_21786_21787_21788_21789_21790_21791_21792_21793_21794_21795_21796_21797_21798_21799_21800_21801_21802_21803_21804_21805_21806_21807_21808_21809_21810_21811_21812_21813_21814_21815_21816_21817_21818_21819_21820_21821_21822_21823_21824_21825_21826_21827_21828_21829_21830_21831_21832_21833_21834_21835_21836_21837_21838_21839_21840_21841_21842_21843_21844_21845_21846_21847_21848_21849_21850_21851_21852_21853_21854_21855_21856_21857_21858_21859_21860_21861_21862_21863_21864_21865_21866_21867_21868_21869_21870_21871_21872_21873_21874_21875_21876_21877_21878_21879_21880_21881_21882_21883_21884_21885_21886_21887_21888_21889_21890_21891_21892_21893_21894_21895_21896_21897_21898_21899_21900_21901_21902_21903_21904_21905_21906_21907_21908_21909_21910_21911_21912_21913_21914_21915_21916_21917_21918_21919_21920_21921_21922_21923_21924_21925_21926_21927_21928_21929_21930_21931_21932_21933_21934_21935_21936_21937_21938_21939_21940_21941_21942_21943_21944_21945_21946_21947_21948_21949_21950_21951_21952_21953_21954_21955_21956_21957_21958_21959_21960_21961_21962_21963_21964_21965_21966_21967_21968_21969_21970_21971_21972_21973_21974_21975_21976_21977_21978_21979_21980_21981_21982_21983_21984_21985_21986_21987_21988_21989_21990_21991_21992_21993_21994_21995_21996_21997_21998_21999_22000_22001_22002_22003_22004_22005_22006_22007_22008_22009_22010_22011_22012_22013_22014_22015_22016_22017_22018_22019_22020_22021_22022_22023_22024_22025_22026_22027_22028_22029_22030_22031_22032_22033_22034_22035_22036_22037_22038_22039_22040_22041_22042_22043_22044_22045_22046_22047_22048_22049_22050_22051_22052_22053_22054_22055_22056_22057_22058_22059_22060_22061_22062_22063_22064_22065_22066_22067_22068_22069_22070_22071_22072_22073_22074_22075_22076_22077_22078_22079_22080_22081_22082_22083_22084_22085_22086_22087_22088_22089_22090_22091_22092_22093_22094_22095_22096_22097_22098_22099_22100_22101_22102_22103_22104_22105_22106_22107_22108_22109_22110_22111_22112_22113_22114_22115_22116_22117_22118_22119_22120_22121_22122_22123_22124_22125_22126_22127_22128_22129_22130_22131_22132_22133_22134_22135_22136_22137_22138_22139_22140_22141_22142_22143_22144_22145_22146_22147_22148_22149_22150_22151_22152_22153_22154_22155_22156_22157_22158_22159_22160_22161_22162_22163_22164_22165_22166_22167_22168_22169_22170_22171_22172_22173_22174_22175_22176_22177_22178_22179_22180_22181_22182_22183_22184_22185_22186_22187_22188_22189_22190_22191_22192_22193_22194_22195_22196_22197_22198_22199_22200_22201_22202_22203_22204_22205_22206_22207_22208_22209_22210_22211_22212_22213_22214_22215_22216_22217_22218_22219_22220_22221_22222_22223_22224_22225_22226_22227_22228_22229_22230_22231_22232_22233_22234_22235_22236_22237_22238_22239_22240_22241_22242_22243_22244_22245_22246_22247_22248_22249_22250_22251_22252_22253_22254_22255_22256_22257_22258_22259_22260_22261_22262_22263_22264_22265_22266_22267_22268_22269_22270_22271_22272_22273_22274_22275_22276_22277_22278_22279_22280_22281_22282_22283_22284_22285_22286_22287_22288_22289_22290_22291_22292_22293_22294_22295_22296_22297_22298_22299_22300_22301_22302_22303_22304_22305_22306_22307_22308_22309_22310_22311_22312_22313_22314_22315_22316_22317_22318_22319_22320_22321_22322_22323_22324_22325_22326_22327_22328_22329_22330_22331_22332_22333_22334_22335_22336_22337_22338_22339_22340_22341_22342_22343_22344_22345_22346_22347_22348_22349_22350_22351_22352_22353_22354_22355_22356_22357_22358_22359_22360_22361_22362_22363_22364_22365_22366_22367_22368_22369_22370_22371_22372_22373_22374_22375_22376_22377_22378_22379_22380_22381_22382_22383_22384_22385_22386_22387_22388_22389_22390_22391_22392_22393_22394_22395_22396_22397_22398_22399_22400_22401_22402_22403_22404_22405_22406_22407_22408_22409_22410_22411_22412_22413_22414_22415_22416_22417_22418_22419_22420_22421_22422_22423_22424_22425_22426_22427_22428_22429_22430_22431_22432_22433_22434_22435_22436_22437_22438_22439_22440_22441_22442_22443_22444_22445_22446_22447_22448_22449_22450_22451_22452_22453_22454_22455_22456_22457_22458_22459_22460_22461_22462_22463_22464_22465_22466_22467_22468_22469_22470_22471_22472_22473_22474_22475_22476_22477_22478_22479_22480_22481_22482_22483_22484_22485_22486_22487_22488_22489_22490_22491_22492_22493_22494_22495_22496_22497_22498_22499_22500_22501_22502_22503_22504_22505_22506_22507_22508_22509_22510_22511_22512_22513_22514_22515_22516_22517_22518_22519_22520_22521_22522_22523_22524_22525_22526_22527_22528_22529_22530_22531_22532_22533_22534_22535_22536_22537_22538_22539_22540_22541_22542_22543_22544_22545_22546_22547_22548_22549_22550_22551_22552_22553_22554_22555_22556_22557_22558_22559_22560_22561_22562_22563_22564_22565_22566_22567_22568_22569_22570_22571_22572_22573_22574_22575_22576_22577_22578_22579_22580_22581_22582_22583_22584_22585_22586_22587_22588_22589_22590_22591_22592_22593_22594_22595_22596_22597_22598_22599_22600_22601_22602_22603_22604_22605_22606_22607_22608_22609_22610_22611_22612_22613_22614_22615_22616_22617_22618_22619_22620_22621_22622_22623_22624_22625_22626_22627_22628_22629_22630_22631_22632_22633_22634_22635_22636_22637_22638_22639_22640_22641_22642_22643_22644_22645_22646_22647_22648_22649_22650_22651_22652_22653_22654_22655_22656_22657_22658_22659_22660_22661_22662_22663_22664_22665_22666_22667_22668_22669_22670_22671_22672_22673_22674_22675_22676_22677_22678_22679_22680_22681_22682_22683_22684_22685_22686_22687_22688_22689_22690_22691_22692_22693_22694_22695_22696_22697_22698_22699_22700_22701_22702_22703_22704_22705_22706_22707_22708_22709_22710_22711_22712_22713_22714_22715_22716_22717_22718_22719_22720_22721_22722_22723_22724_22725_22726_22727_22728_22729_22730_22731_22732_22733_22734_22735_22736_22737_22738_22739_22740_22741_22742_22743_22744_22745_22746_22747_22748_22749_22750_22751_22752_22753_22754_22755_22756_22757_22758_22759_22760_22761_22762_22763_22764_22765_22766_22767_22768_22769_22770_22771_22772_22773_22774_22775_22776_22777_22778_22779_22780_22781_22782_22783_22784_22785_22786_22787_22788_22789_22790_22791_22792_22793_22794_22795_22796_22797_22798_22799_22800_22801_22802_22803_22804_22805_22806_22807_22808_22809_22810_22811_22812_22813_22814_22815_22816_22817_22818_22819_22820_22821_22822_22823_22824_22825_22826_22827_22828_22829_22830_22831_22832_22833_22834_22835_22836_22837_22838_22839_22840_22841_22842_22843_22844_22845_22846_22847_22848_22849_22850_22851_22852_22853_22854_22855_22856_22857_22858_22859_22860_22861_22862_22863_22864_22865_22866_22867_22868_22869_22870_22871_22872_22873_22874_22875_22876_22877_22878_22879_22880_22881_22882_22883_22884_22885_22886_22887_22888_22889_22890_22891_22892_22893_22894_22895_22896_22897_22898_22899_22900_22901_22902_22903_22904_22905_22906_22907_22908_22909_22910_22911_22912_22913_22914_22915_22916_22917_22918_22919_22920_22921_22922_22923_22924_22925_22926_22927_22928_22929_22930_22931_22932_22933_22934_22935_22936_22937_22938_22939_22940_22941_22942_22943_22944_22945_22946_22947_22948_22949_22950_22951_22952_22953_22954_22955_22956_22957_22958_22959_22960_22961_22962_22963_22964_22965_22966_22967_22968_22969_22970_22971_22972_22973_22974_22975_22976_22977_22978_22979_22980_22981_22982_22983_22984_22985_22986_22987_22988_22989_22990_22991_22992_22993_22994_22995_22996_22997_22998_22999_23000_23001_23002_23003_23004_23005_23006_23007_23008_23009_23010_23011_23012_23013_23014_23015_23016_23017_23018_23019_23020_23021_23022_23023_23024_23025_23026_23027_23028_23029_23030_23031_23032_23033_23034_23035_23036_23037_23038_23039_23040_23041_23042_23043_23044_23045_23046_23047_23048_23049_23050_23051_23052_23053_23054_23055_23056_23057_23058_23059_23060_23061_23062_23063_23064_23065_23066_23067_23068_23069_23070_23071_23072_23073_23074_23075_23076_23077_23078_23079_23080_23081_23082_23083_23084_23085_23086_23087_23088_23089_23090_23091_23092_23093_23094_23095_23096_23097_23098_23099_23100_23101_23102_23103_23104_23105_23106_23107_23108_23109_23110_23111_23112_23113_23114_23115_23116_23117_23118_23119_23120_23121_23122_23123_23124_23125_23126_23127_23128_23129_23130_23131_23132_23133_23134_23135_23136_23137_23138_23139_23140_23141_23142_23143_23144_23145_23146_23147_23148_23149_23150_23151_23152_23153_23154_23155_23156_23157_23158_23159_23160_23161_23162_23163_23164_23165_23166_23167_23168_23169_23170_23171_23172_23173_23174_23175_23176_23177_23178_23179_23180_23181_23182_23183_23184_23185_23186_23187_23188_23189_23190_23191_23192_23193_23194_23195_23196_23197_23198_23199_23200_23201_23202_23203_23204_23205_23206_23207_23208_23209_23210_23211_23212_23213_23214_23215_23216_23217_23218_23219_23220_23221_23222_23223_23224_23225_23226_23227_23228_23229_23230_23231_23232_23233_23234_23235_23236_23237_23238_23239_23240_23241_23242_23243_23244_23245_23246_23247_23248_23249_23250_23251_23252_23253_23254_23255_23256_23257_23258_23259_23260_23261_23262_23263_23264_23265_23266_23267_23268_23269_23270_23271_23272_23273_23274_23275_23276_23277_23278_23279_23280_23281_23282_23283_23284_23285_23286_23287_23288_23289_23290_23291_23292_23293_23294_23295_23296_23297_23298_23299_23300_23301_23302_23303_23304_23305_23306_23307_23308_23309_23310_23311_23312_23313_23314_23315_23316_23317_23318_23319_23320_23321_23322_23323_23324_23325_23326_23327_23328_23329_23330_23331_23332_23333_23334_23335_23336_23337_23338_23339_23340_23341_23342_23343_23344_23345_23346_23347_23348_23349_23350_23351_23352_23353_23354_23355_23356_23357_23358_23359_23360_23361_23362_23363_23364_23365_23366_23367_23368_23369_23370_23371_23372_23373_23374_23375_23376_23377_23378_23379_23380_23381_23382_23383_23384_23385_23386_23387_23388_23389_23390_23391_23392_23393_23394_23395_23396_23397_23398_23399_23400_23401_23402_23403_23404_23405_23406_23407_23408_23409_23410_23411_23412_23413_23414_23415_23416_23417_23418_23419_23420_23421_23422_23423_23424_23425_23426_23427_23428_23429_23430_23431_23432_23433_23434_23435_23436_23437_23438_23439_23440_23441_23442_23443_23444_23445_23446_23447_23448_23449_23450_23451_23452_23453_23454_23455_23456_23457_23458_23459_23460_23461_23462_23463_23464_23465_23466_23467_23468_23469_23470_23471_23472_23473_23474_23475_23476_23477_23478_23479_23480_23481_23482_23483_23484_23485_23486_23487_23488_23489_23490_23491_23492_23493_23494_23495_23496_23497_23498_23499_23500_23501_23502_23503_23504_23505_23506_23507_23508_23509_23510_23511_23512_23513_23514_23515_23516_23517_23518_23519_23520_23521_23522_23523_23524_23525_23526_23527_23528_23529_23530_23531_23532_23533_23534_23535_23536_23537_23538_23539_23540_23541_23542_23543_23544_23545_23546_23547_23548_23549_23550_23551_23552_23553_23554_23555_23556_23557_23558_23559_23560_23561_23562_23563_23564_23565_23566_23567_23568_23569_23570_23571_23572_23573_23574_23575_23576_23577_23578_23579_23580_23581_23582_23583_23584_23585_23586_23587_23588_23589_23590_23591_23592_23593_23594_23595_23596_23597_23598_23599_23600_23601_23602_23603_23604_23605_23606_23607_23608_23609_23610_23611_23612_23613_23614_23615_23616_23617_23618_23619_23620_23621_23622_23623_23624_23625_23626_23627_23628_23629_23630_23631_23632_23633_23634_23635_23636_23637_23638_23639_23640_23641_23642_23643_23644_23645_23646_23647_23648_23649_23650_23651_23652_23653_23654_23655_23656_23657_23658_23659_23660_23661_23662_23663_23664_23665_23666_23667_23668_23669_23670_23671_23672_23673_23674_23675_23676_23677_23678_23679_23680_23681_23682_23683_23684_23685_23686_23687_23688_23689_23690_23691_23692_23693_23694_23695_23696_23697_23698_23699_23700_23701_23702_23703_23704_23705_23706_23707_23708_23709_23710_23711_23712_23713_23714_23715_23716_23717_23718_23719_23720_23721_23722_23723_23724_23725_23726_23727_23728_23729_23730_23731_23732_23733_23734_23735_23736_23737_23738_23739_23740_23741_23742_23743_23744_23745_23746_23747_23748_23749_23750_23751_23752_23753_23754_23755_23756_23757_23758_23759_23760_23761_23762_23763_23764_23765_23766_23767_23768_23769_23770_23771_23772_23773_23774_23775_23776_23777_23778_23779_23780_23781_23782_23783_23784_23785_23786_23787_23788_23789_23790_23791_23792_23793_23794_23795_23796_23797_23798_23799_23800_23801_23802_23803_23804_23805_23806_23807_23808_23809_23810_23811_23812_23813_23814_23815_23816_23817_23818_23819_23820_23821_23822_23823_23824_23825_23826_23827_23828_23829_23830_23831_23832_23833_23834_23835_23836_23837_23838_23839_23840_23841_23842_23843_23844_23845_23846_23847_23848_23849_23850_23851_23852_23853_23854_23855_23856_23857_23858_23859_23860_23861_23862_23863_23864_23865_23866_23867_23868_23869_23870_23871_23872_23873_23874_23875_23876_23877_23878_23879_23880_23881_23882_23883_23884_23885_23886_23887_23888_23889_23890_23891_23892_23893_23894_23895_23896_23897_23898_23899_23900_23901_23902_23903_23904_23905_23906_23907_23908_23909_23910_23911_23912_23913_23914_23915_23916_23917_23918_23919_23920_23921_23922_23923_23924_23925_23926_23927_23928_23929_23930_23931_23932_23933_23934_23935_23936_23937_23938_23939_23940_23941_23942_23943_23944_23945_23946_23947_23948_23949_23950_23951_23952_23953_23954_23955_23956_23957_23958_23959_23960_23961_23962_23963_23964_23965_23966_23967_23968_23969_23970_23971_23972_23973_23974_23975_23976_23977_23978_23979_23980_23981_23982_23983_23984_23985_23986_23987_23988_23989_23990_23991_23992_23993_23994_23995_23996_23997_23998_23999_24000_24001_24002_24003_24004_24005_24006_24007_24008_24009_24010_24011_24012_24013_24014_24015_24016_24017_24018_24019_24020_24021_24022_24023_24024_24025_24026_24027_24028_24029_24030_24031_24032_24033_24034_24035_24036_24037_24038_24039_24040_24041_24042_24043_24044_24045_24046_24047_24048_24049_24050_24051_24052_24053_24054_24055_24056_24057_24058_24059_24060_24061_24062_24063_24064_24065_24066_24067_24068_24069_24070_24071_24072_24073_24074_24075_24076_24077_24078_24079_24080_24081_24082_24083_24084_24085_24086_24087_24088_24089_24090_24091_24092_24093_24094_24095_24096_24097_24098_24099_24100_24101_24102_24103_24104_24105_24106_24107_24108_24109_24110_24111_24112_24113_24114_24115_24116_24117_24118_24119_24120_24121_24122_24123_24124_24125_24126_24127_24128_24129_24130_24131_24132_24133_24134_24135_24136_24137_24138_24139_24140_24141_24142_24143_24144_24145_24146_24147_24148_24149_24150_24151_24152_24153_24154_24155_24156_24157_24158_24159_24160_24161_24162_24163_24164_24165_24166_24167_24168_24169_24170_24171_24172_24173_24174_24175_24176_24177_24178_24179_24180_24181_24182_24183_24184_24185_24186_24187_24188_24189_24190_24191_24192_24193_24194_24195_24196_24197_24198_24199_24200_24201_24202_24203_24204_24205_24206_24207_24208_24209_24210_24211_24212_24213_24214_24215_24216_24217_24218_24219_24220_24221_24222_24223_24224_24225_24226_24227_24228_24229_24230_24231_24232_24233_24234_24235_24236_24237_24238_24239_24240_24241_24242_24243_24244_24245_24246_24247_24248_24249_24250_24251_24252_24253_24254_24255_24256_24257_24258_24259_24260_24261_24262_24263_24264_24265_24266_24267_24268_24269_24270_24271_24272_24273_24274_24275_24276_24277_24278_24279_24280_24281_24282_24283_24284_24285_24286_24287_24288_24289_24290_24291_24292_24293_24294_24295_24296_24297_24298_24299_24300_24301_24302_24303_24304_24305_24306_24307_24308_24309_24310_24311_24312_24313_24314_24315_24316_24317_24318_24319_24320_24321_24322_24323_24324_24325_24326_24327_24328_24329_24330_24331_24332_24333_24334_24335_24336_24337_24338_24339_24340_24341_24342_24343_24344_24345_24346_24347_24348_24349_24350_24351_24352_24353_24354_24355_24356_24357_24358_24359_24360_24361_24362_24363_24364_24365_24366_24367_24368_24369_24370_24371_24372_24373_24374_24375_24376_24377_24378_24379_24380_24381_24382_24383_24384_24385_24386_24387_24388_24389_24390_24391_24392_24393_24394_24395_24396_24397_24398_24399_24400_24401_24402_24403_24404_24405_24406_24407_24408_24409_24410_24411_24412_24413_24414_24415_24416_24417_24418_24419_24420_24421_24422_24423_24424_24425_24426_24427_24428_24429_24430_24431_24432_24433_24434_24435_24436_24437_24438_24439_24440_24441_24442_24443_24444_24445_24446_24447_24448_24449_24450_24451_24452_24453_24454_24455_24456_24457_24458_24459_24460_24461_24462_24463_24464_24465_24466_24467_24468_24469_24470_24471_24472_24473_24474_24475_24476_24477_24478_24479_24480_24481_24482_24483_24484_24485_24486_24487_24488_24489_24490_24491_24492_24493_24494_24495_24496_24497_24498_24499_24500_24501_24502_24503_24504_24505_24506_24507_24508_24509_24510_24511_24512_24513_24514_24515_24516_24517_24518_24519_24520_24521_24522_24523_24524_24525_24526_24527_24528_24529_24530_24531_24532_24533_24534_24535_24536_24537_24538_24539_24540_24541_24542_24543_24544_24545_24546_24547_24548_24549_24550_24551_24552_24553_24554_24555_24556_24557_24558_24559_24560_24561_24562_24563_24564_24565_24566_24567_24568_24569_24570_24571_24572_24573_24574_24575_24576_24577_24578_24579_24580_24581_24582_24583_24584_24585_24586_24587_24588_24589_24590_24591_24592_24593_24594_24595_24596_24597_24598_24599_24600_24601_24602_24603_24604_24605_24606_24607_24608_24609_24610_24611_24612_24613_24614_24615_24616_24617_24618_24619_24620_24621_24622_24623_24624_24625_24626_24627_24628_24629_24630_24631_24632_24633_24634_24635_24636_24637_24638_24639_24640_24641_24642_24643_24644_24645_24646_24647_24648_24649_24650_24651_24652_24653_24654_24655_24656_24657_24658_24659_24660_24661_24662_24663_24664_24665_24666_24667_24668_24669_24670_24671_24672_24673_24674_24675_24676_24677_24678_24679_24680_24681_24682_24683_24684_24685_24686_24687_24688_24689_24690_24691_24692_24693_24694_24695_24696_24697_24698_24699_24700_24701_24702_24703_24704_24705_24706_24707_24708_24709_24710_24711_24712_24713_24714_24715_24716_24717_24718_24719_24720_24721_24722_24723_24724_24725_24726_24727_24728_24729_24730_24731_24732_24733_24734_24735_24736_24737_24738_24739_24740_24741_24742_24743_24744_24745_24746_24747_24748_24749_24750_24751_24752_24753_24754_24755_24756_24757_24758_24759_24760_24761_24762_24763_24764_24765_24766_24767_24768_24769_24770_24771_24772_24773_24774_24775_24776_24777_24778_24779_24780_24781_24782_24783_24784_24785_24786_24787_24788_24789_24790_24791_24792_24793_24794_24795_24796_24797_24798_24799_24800_24801_24802_24803_24804_24805_24806_24807_24808_24809_24810_24811_24812_24813_24814_24815_24816_24817_24818_24819_24820_24821_24822_24823_24824_24825_24826_24827_24828_24829_24830_24831_24832_24833_24834_24835_24836_24837_24838_24839_24840_24841_24842_24843_24844_24845_24846_24847_24848_24849_24850_24851_24852_24853_24854_24855_24856_24857_24858_24859_24860_24861_24862_24863_24864_24865_24866_24867_24868_24869_24870_24871_24872_24873_24874_24875_24876_24877_24878_24879_24880_24881_24882_24883_24884_24885_24886_24887_24888_24889_24890_24891_24892_24893_24894_24895_24896_24897_24898_24899_24900_24901_24902_24903_24904_24905_24906_24907_24908_24909_24910_24911_24912_24913_24914_24915_24916_24917_24918_24919_24920_24921_24922_24923_24924_24925_24926_24927_24928_24929_24930_24931_24932_24933_24934_24935_24936_24937_24938_24939_24940_24941_24942_24943_24944_24945_24946_24947_24948_24949_24950_24951_24952_24953_24954_24955_24956_24957_24958_24959_24960_24961_24962_24963_24964_24965_24966_24967_24968_24969_24970_24971_24972_24973_24974_24975_24976_24977_24978_24979_24980_24981_24982_24983_24984_24985_24986_24987_24988_24989_24990_24991_24992_24993_24994_24995_24996_24997_24998_24999_25000_25001_25002_25003_25004_25005_25006_25007_25008_25009_25010_25011_25012_25013_25014_25015_25016_25017_25018_25019_25020_25021_25022_25023_25024_25025_25026_25027_25028_25029_25030_25031_25032_25033_25034_25035_25036_25037_25038_25039_25040_25041_25042_25043_25044_25045_25046_25047_25048_25049_25050_25051_25052_25053_25054_25055_25056_25057_25058_25059_25060_25061_25062_25063_25064_25065_25066_25067_25068_25069_25070_25071_25072_25073_25074_25075_25076_25077_25078_25079_25080_25081_25082_25083_25084_25085_25086_25087_25088_25089_25090_25091_25092_25093_25094_25095_25096_25097_25098_25099_25100_25101_25102_25103_25104_25105_25106_25107_25108_25109_25110_25111_25112_25113_25114_25115_25116_25117_25118_25119_25120_25121_25122_25123_25124_25125_25126_25127_25128_25129_25130_25131_25132_25133_25134_25135_25136_25137_25138_25139_25140_25141_25142_25143_25144_25145_25146_25147_25148_25149_25150_25151_25152_25153_25154_25155_25156_25157_25158_25159_25160_25161_25162_25163_25164_25165_25166_25167_25168_25169_25170_25171_25172_25173_25174_25175_25176_25177_25178_25179_25180_25181_25182_25183_25184_25185_25186_25187_25188_25189_25190_25191_25192_25193_25194_25195_25196_25197_25198_25199_25200_25201_25202_25203_25204_25205_25206_25207_25208_25209_25210_25211_25212_25213_25214_25215_25216_25217_25218_25219_25220_25221_25222_25223_25224_25225_25226_25227_25228_25229_25230_25231_25232_25233_25234_25235_25236_25237_25238_25239_25240_25241_25242_25243_25244_25245_25246_25247_25248_25249_25250_25251_25252_25253_25254_25255_25256_25257_25258_25259_25260_25261_25262_25263_25264_25265_25266_25267_25268_25269_25270_25271_25272_25273_25274_25275_25276_25277_25278_25279_25280_25281_25282_25283_25284_25285_25286_25287_25288_25289_25290_25291_25292_25293_25294_25295_25296_25297_25298_25299_25300_25301_25302_25303_25304_25305_25306_25307_25308_25309_25310_25311_25312_25313_25314_25315_25316_25317_25318_25319_25320_25321_25322_25323_25324_25325_25326_25327_25328_25329_25330_25331_25332_25333_25334_25335_25336_25337_25338_25339_25340_25341_25342_25343_25344_25345_25346_25347_25348_25349_25350_25351_25352_25353_25354_25355_25356_25357_25358_25359_25360_25361_25362_25363_25364_25365_25366_25367_25368_25369_25370_25371_25372_25373_25374_25375_25376_25377_25378_25379_25380_25381_25382_25383_25384_25385_25386_25387_25388_25389_25390_25391_25392_25393_25394_25395_25396_25397_25398_25399_25400_25401_25402_25403_25404_25405_25406_25407_25408_25409_25410_25411_25412_25413_25414_25415_25416_25417_25418_25419_25420_25421_25422_25423_25424_25425_25426_25427_25428_25429_25430_25431_25432_25433_25434_25435_25436_25437_25438_25439_25440_25441_25442_25443_25444_25445_25446_25447_25448_25449_25450_25451_25452_25453_25454_25455_25456_25457_25458_25459_25460_25461_25462_25463_25464_25465_25466_25467_25468_25469_25470_25471_25472_25473_25474_25475_25476_25477_25478_25479_25480_25481_25482_25483_25484_25485_25486_25487_25488_25489_25490_25491_25492_25493_25494_25495_25496_25497_25498_25499_25500_25501_25502_25503_25504_25505_25506_25507_25508_25509_25510_25511_25512_25513_25514_25515_25516_25517_25518_25519_25520_25521_25522_25523_25524_25525_25526_25527_25528_25529_25530_25531_25532_25533_25534_25535_25536_25537_25538_25539_25540_25541_25542_25543_25544_25545_25546_25547_25548_25549_25550_25551_25552_25553_25554_25555_25556_25557_25558_25559_25560_25561_25562_25563_25564_25565_25566_25567_25568_25569_25570_25571_25572_25573_25574_25575_25576_25577_25578_25579_25580_25581_25582_25583_25584_25585_25586_25587_25588_25589_25590_25591_25592_25593_25594_25595_25596_25597_25598_25599_25600_25601_25602_25603_25604_25605_25606_25607_25608_25609_25610_25611_25612_25613_25614_25615_25616_25617_25618_25619_25620_25621_25622_25623_25624_25625_25626_25627_25628_25629_25630_25631_25632_25633_25634_25635_25636_25637_25638_25639_25640_25641_25642_25643_25644_25645_25646_25647_25648_25649_25650_25651_25652_25653_25654_25655_25656_25657_25658_25659_25660_25661_25662_25663_25664_25665_25666_25667_25668_25669_25670_25671_25672_25673_25674_25675_25676_25677_25678_25679_25680_25681_25682_25683_25684_25685_25686_25687_25688_25689_25690_25691_25692_25693_25694_25695_25696_25697_25698_25699_25700_25701_25702_25703_25704_25705_25706_25707_25708_25709_25710_25711_25712_25713_25714_25715_25716_25717_25718_25719_25720_25721_25722_25723_25724_25725_25726_25727_25728_25729_25730_25731_25732_25733_25734_25735_25736_25737_25738_25739_25740_25741_25742_25743_25744_25745_25746_25747_25748_25749_25750_25751_25752_25753_25754_25755_25756_25757_25758_25759_25760_25761_25762_25763_25764_25765_25766_25767_25768_25769_25770_25771_25772_25773_25774_25775_25776_25777_25778_25779_25780_25781_25782_25783_25784_25785_25786_25787_25788_25789_25790_25791_25792_25793_25794_25795_25796_25797_25798_25799_25800_25801_25802_25803_25804_25805_25806_25807_25808_25809_25810_25811_25812_25813_25814_25815_25816_25817_25818_25819_25820_25821_25822_25823_25824_25825_25826_25827_25828_25829_25830_25831_25832_25833_25834_25835_25836_25837_25838_25839_25840_25841_25842_25843_25844_25845_25846_25847_25848_25849_25850_25851_25852_25853_25854_25855_25856_25857_25858_25859_25860_25861_25862_25863_25864_25865_25866_25867_25868_25869_25870_25871_25872_25873_25874_25875_25876_25877_25878_25879_25880_25881_25882_25883_25884_25885_25886_25887_25888_25889_25890_25891_25892_25893_25894_25895_25896_25897_25898_25899_25900_25901_25902_25903_25904_25905_25906_25907_25908_25909_25910_25911_25912_25913_25914_25915_25916_25917_25918_25919_25920_25921_25922_25923_25924_25925_25926_25927_25928_25929_25930_25931_25932_25933_25934_25935_25936_25937_25938_25939_25940_25941_25942_25943_25944_25945_25946_25947_25948_25949_25950_25951_25952_25953_25954_25955_25956_25957_25958_25959_25960_25961_25962_25963_25964_25965_25966_25967_25968_25969_25970_25971_25972_25973_25974_25975_25976_25977_25978_25979_25980_25981_25982_25983_25984_25985_25986_25987_25988_25989_25990_25991_25992_25993_25994_25995_25996_25997_25998_25999_26000_26001_26002_26003_26004_26005_26006_26007_26008_26009_26010_26011_26012_26013_26014_26015_26016_26017_26018_26019_26020_26021_26022_26023_26024_26025_26026_26027_26028_26029_26030_26031_26032_26033_26034_26035_26036_26037_26038_26039_26040_26041_26042_26043_26044_26045_26046_26047_26048_26049_26050_26051_26052_26053_26054_26055_26056_26057_26058_26059_26060_26061_26062_26063_26064_26065_26066_26067_26068_26069_26070_26071_26072_26073_26074_26075_26076_26077_26078_26079_26080_26081_26082_26083_26084_26085_26086_26087_26088_26089_26090_26091_26092_26093_26094_26095_26096_26097_26098_26099_26100_26101_26102_26103_26104_26105_26106_26107_26108_26109_26110_26111_26112_26113_26114_26115_26116_26117_26118_26119_26120_26121_26122_26123_26124_26125_26126_26127_26128_26129_26130_26131_26132_26133_26134_26135_26136_26137_26138_26139_26140_26141_26142_26143_26144_26145_26146_26147_26148_26149_26150_26151_26152_26153_26154_26155_26156_26157_26158_26159_26160_26161_26162_26163_26164_26165_26166_26167_26168_26169_26170_26171_26172_26173_26174_26175_26176_26177_26178_26179_26180_26181_26182_26183_26184_26185_26186_26187_26188_26189_26190_26191_26192_26193_26194_26195_26196_26197_26198_26199_26200_26201_26202_26203_26204_26205_26206_26207_26208_26209_26210_26211_26212_26213_26214_26215_26216_26217_26218_26219_26220_26221_26222_26223_26224_26225_26226_26227_26228_26229_26230_26231_26232_26233_26234_26235_26236_26237_26238_26239_26240_26241_26242_26243_26244_26245_26246_26247_26248_26249_26250_26251_26252_26253_26254_26255_26256_26257_26258_26259_26260_26261_26262_26263_26264_26265_26266_26267_26268_26269_26270_26271_26272_26273_26274_26275_26276_26277_26278_26279_26280_26281_26282_26283_26284_26285_26286_26287_26288_26289_26290_26291_26292_26293_26294_26295_26296_26297_26298_26299_26300_26301_26302_26303_26304_26305_26306_26307_26308_26309_26310_26311_26312_26313_26314_26315_26316_26317_26318_26319_26320_26321_26322_26323_26324_26325_26326_26327_26328_26329_26330_26331_26332_26333_26334_26335_26336_26337_26338_26339_26340_26341_26342_26343_26344_26345_26346_26347_26348_26349_26350_26351_26352_26353_26354_26355_26356_26357_26358_26359_26360_26361_26362_26363_26364_26365_26366_26367_26368_26369_26370_26371_26372_26373_26374_26375_26376_26377_26378_26379_26380_26381_26382_26383_26384_26385_26386_26387_26388_26389_26390_26391_26392_26393_26394_26395_26396_26397_26398_26399_26400_26401_26402_26403_26404_26405_26406_26407_26408_26409_26410_26411_26412_26413_26414_26415_26416_26417_26418_26419_26420_26421_26422_26423_26424_26425_26426_26427_26428_26429_26430_26431_26432_26433_26434_26435_26436_26437_26438_26439_26440_26441_26442_26443_26444_26445_26446_26447_26448_26449_26450_26451_26452_26453_26454_26455_26456_26457_26458_26459_26460_26461_26462_26463_26464_26465_26466_26467_26468_26469_26470_26471_26472_26473_26474_26475_26476_26477_26478_26479_26480_26481_26482_26483_26484_26485_26486_26487_26488_26489_26490_26491_26492_26493_26494_26495_26496_26497_26498_26499_26500_26501_26502_26503_26504_26505_26506_26507_26508_26509_26510_26511_26512_26513_26514_26515_26516_26517_26518_26519_26520_26521_26522_26523_26524_26525_26526_26527_26528_26529_26530_26531_26532_26533_26534_26535_26536_26537_26538_26539_26540_26541_26542_26543_26544_26545_26546_26547_26548_26549_26550_26551_26552_26553_26554_26555_26556_26557_26558_26559_26560_26561_26562_26563_26564_26565_26566_26567_26568_26569_26570_26571_26572_26573_26574_26575_26576_26577_26578_26579_26580_26581_26582_26583_26584_26585_26586_26587_26588_26589_26590_26591_26592_26593_26594_26595_26596_26597_26598_26599_26600_26601_26602_26603_26604_26605_26606_26607_26608_26609_26610_26611_26612_26613_26614_26615_26616_26617_26618_26619_26620_26621_26622_26623_26624_26625_26626_26627_26628_26629_26630_26631_26632_26633_26634_26635_26636_26637_26638_26639_26640_26641_26642_26643_26644_26645_26646_26647_26648_26649_26650_26651_26652_26653_26654_26655_26656_26657_26658_26659_26660_26661_26662_26663_26664_26665_26666_26667_26668_26669_26670_26671_26672_26673_26674_26675_26676_26677_26678_26679_26680_26681_26682_26683_26684_26685_26686_26687_26688_26689_26690_26691_26692_26693_26694_26695_26696_26697_26698_26699_26700_26701_26702_26703_26704_26705_26706_26707_26708_26709_26710_26711_26712_26713_26714_26715_26716_26717_26718_26719_26720_26721_26722_26723_26724_26725_26726_26727_26728_26729_26730_26731_26732_26733_26734_26735_26736_26737_26738_26739_26740_26741_26742_26743_26744_26745_26746_26747_26748_26749_26750_26751_26752_26753_26754_26755_26756_26757_26758_26759_26760_26761_26762_26763_26764_26765_26766_26767_26768_26769_26770_26771_26772_26773_26774_26775_26776_26777_26778_26779_26780_26781_26782_26783_26784_26785_26786_26787_26788_26789_26790_26791_26792_26793_26794_26795_26796_26797_26798_26799_26800_26801_26802_26803_26804_26805_26806_26807_26808_26809_26810_26811_26812_26813_26814_26815_26816_26817_26818_26819_26820_26821_26822_26823_26824_26825_26826_26827_26828_26829_26830_26831_26832_26833_26834_26835_26836_26837_26838_26839_26840_26841_26842_26843_26844_26845_26846_26847_26848_26849_26850_26851_26852_26853_26854_26855_26856_26857_26858_26859_26860_26861_26862_26863_26864_26865_26866_26867_26868_26869_26870_26871_26872_26873_26874_26875_26876_26877_26878_26879_26880_26881_26882_26883_26884_26885_26886_26887_26888_26889_26890_26891_26892_26893_26894_26895_26896_26897_26898_26899_26900_26901_26902_26903_26904_26905_26906_26907_26908_26909_26910_26911_26912_26913_26914_26915_26916_26917_26918_26919_26920_26921_26922_26923_26924_26925_26926_26927_26928_26929_26930_26931_26932_26933_26934_26935_26936_26937_26938_26939_26940_26941_26942_26943_26944_26945_26946_26947_26948_26949_26950_26951_26952_26953_26954_26955_26956_26957_26958_26959_26960_26961_26962_26963_26964_26965_26966_26967_26968_26969_26970_26971_26972_26973_26974_26975_26976_26977_26978_26979_26980_26981_26982_26983_26984_26985_26986_26987_26988_26989_26990_26991_26992_26993_26994_26995_26996_26997_26998_26999_27000_27001_27002_27003_27004_27005_27006_27007_27008_27009_27010_27011_27012_27013_27014_27015_27016_27017_27018_27019_27020_27021_27022_27023_27024_27025_27026_27027_27028_27029_27030_27031_27032_27033_27034_27035_27036_27037_27038_27039_27040_27041_27042_27043_27044_27045_27046_27047_27048_27049_27050_27051_27052_27053_27054_27055_27056_27057_27058_27059_27060_27061_27062_27063_27064_27065_27066_27067_27068_27069_27070_27071_27072_27073_27074_27075_27076_27077_27078_27079_27080_27081_27082_27083_27084_27085_27086_27087_27088_27089_27090_27091_27092_27093_27094_27095_27096_27097_27098_27099_27100_27101_27102_27103_27104_27105_27106_27107_27108_27109_27110_27111_27112_27113_27114_27115_27116_27117_27118_27119_27120_27121_27122_27123_27124_27125_27126_27127_27128_27129_27130_27131_27132_27133_27134_27135_27136_27137_27138_27139_27140_27141_27142_27143_27144_27145_27146_27147_27148_27149_27150_27151_27152_27153_27154_27155_27156_27157_27158_27159_27160_27161_27162_27163_27164_27165_27166_27167_27168_27169_27170_27171_27172_27173_27174_27175_27176_27177_27178_27179_27180_27181_27182_27183_27184_27185_27186_27187_27188_27189_27190_27191_27192_27193_27194_27195_27196_27197_27198_27199_27200_27201_27202_27203_27204_27205_27206_27207_27208_27209_27210_27211_27212_27213_27214_27215_27216_27217_27218_27219_27220_27221_27222_27223_27224_27225_27226_27227_27228_27229_27230_27231_27232_27233_27234_27235_27236_27237_27238_27239_27240_27241_27242_27243_27244_27245_27246_27247_27248_27249_27250_27251_27252_27253_27254_27255_27256_27257_27258_27259_27260_27261_27262_27263_27264_27265_27266_27267_27268_27269_27270_27271_27272_27273_27274_27275_27276_27277_27278_27279_27280_27281_27282_27283_27284_27285_27286_27287_27288_27289_27290_27291_27292_27293_27294_27295_27296_27297_27298_27299_27300_27301_27302_27303_27304_27305_27306_27307_27308_27309_27310_27311_27312_27313_27314_27315_27316_27317_27318_27319_27320_27321_27322_27323_27324_27325_27326_27327_27328_27329_27330_27331_27332_27333_27334_27335_27336_27337_27338_27339_27340_27341_27342_27343_27344_27345_27346_27347_27348_27349_27350_27351_27352_27353_27354_27355_27356_27357_27358_27359_27360_27361_27362_27363_27364_27365_27366_27367_27368_27369_27370_27371_27372_27373_27374_27375_27376_27377_27378_27379_27380_27381_27382_27383_27384_27385_27386_27387_27388_27389_27390_27391_27392_27393_27394_27395_27396_27397_27398_27399_27400_27401_27402_27403_27404_27405_27406_27407_27408_27409_27410_27411_27412_27413_27414_27415_27416_27417_27418_27419_27420_27421_27422_27423_27424_27425_27426_27427_27428_27429_27430_27431_27432_27433_27434_27435_27436_27437_27438_27439_27440_27441_27442_27443_27444_27445_27446_27447_27448_27449_27450_27451_27452_27453_27454_27455_27456_27457_27458_27459_27460_27461_27462_27463_27464_27465_27466_27467_27468_27469_27470_27471_27472_27473_27474_27475_27476_27477_27478_27479_27480_27481_27482_27483_27484_27485_27486_27487_27488_27489_27490_27491_27492_27493_27494_27495_27496_27497_27498_27499_27500_27501_27502_27503_27504_27505_27506_27507_27508_27509_27510_27511_27512_27513_27514_27515_27516_27517_27518_27519_27520_27521_27522_27523_27524_27525_27526_27527_27528_27529_27530_27531_27532_27533_27534_27535_27536_27537_27538_27539_27540_27541_27542_27543_27544_27545_27546_27547_27548_27549_27550_27551_27552_27553_27554_27555_27556_27557_27558_27559_27560_27561_27562_27563_27564_27565_27566_27567_27568_27569_27570_27571_27572_27573_27574_27575_27576_27577_27578_27579_27580_27581_27582_27583_27584_27585_27586_27587_27588_27589_27590_27591_27592_27593_27594_27595_27596_27597_27598_27599_27600_27601_27602_27603_27604_27605_27606_27607_27608_27609_27610_27611_27612_27613_27614_27615_27616_27617_27618_27619_27620_27621_27622_27623_27624_27625_27626_27627_27628_27629_27630_27631_27632_27633_27634_27635_27636_27637_27638_27639_27640_27641_27642_27643_27644_27645_27646_27647_27648_27649_27650_27651_27652_27653_27654_27655_27656_27657_27658_27659_27660_27661_27662_27663_27664_27665_27666_27667_27668_27669_27670_27671_27672_27673_27674_27675_27676_27677_27678_27679_27680_27681_27682_27683_27684_27685_27686_27687_27688_27689_27690_27691_27692_27693_27694_27695_27696_27697_27698_27699_27700_27701_27702_27703_27704_27705_27706_27707_27708_27709_27710_27711_27712_27713_27714_27715_27716_27717_27718_27719_27720_27721_27722_27723_27724_27725_27726_27727_27728_27729_27730_27731_27732_27733_27734_27735_27736_27737_27738_27739_27740_27741_27742_27743_27744_27745_27746_27747_27748_27749_27750_27751_27752_27753_27754_27755_27756_27757_27758_27759_27760_27761_27762_27763_27764_27765_27766_27767_27768_27769_27770_27771_27772_27773_27774_27775_27776_27777_27778_27779_27780_27781_27782_27783_27784_27785_27786_27787_27788_27789_27790_27791_27792_27793_27794_27795_27796_27797_27798_27799_27800_27801_27802_27803_27804_27805_27806_27807_27808_27809_27810_27811_27812_27813_27814_27815_27816_27817_27818_27819_27820_27821_27822_27823_27824_27825_27826_27827_27828_27829_27830_27831_27832_27833_27834_27835_27836_27837_27838_27839_27840_27841_27842_27843_27844_27845_27846_27847_27848_27849_27850_27851_27852_27853_27854_27855_27856_27857_27858_27859_27860_27861_27862_27863_27864_27865_27866_27867_27868_27869_27870_27871_27872_27873_27874_27875_27876_27877_27878_27879_27880_27881_27882_27883_27884_27885_27886_27887_27888_27889_27890_27891_27892_27893_27894_27895_27896_27897_27898_27899_27900_27901_27902_27903_27904_27905_27906_27907_27908_27909_27910_27911_27912_27913_27914_27915_27916_27917_27918_27919_27920_27921_27922_27923_27924_27925_27926_27927_27928_27929_27930_27931_27932_27933_27934_27935_27936_27937_27938_27939_27940_27941_27942_27943_27944_27945_27946_27947_27948_27949_27950_27951_27952_27953_27954_27955_27956_27957_27958_27959_27960_27961_27962_27963_27964_27965_27966_27967_27968_27969_27970_27971_27972_27973_27974_27975_27976_27977_27978_27979_27980_27981_27982_27983_27984_27985_27986_27987_27988_27989_27990_27991_27992_27993_27994_27995_27996_27997_27998_27999_28000_28001_28002_28003_28004_28005_28006_28007_28008_28009_28010_28011_28012_28013_28014_28015_28016_28017_28018_28019_28020_28021_28022_28023_28024_28025_28026_28027_28028_28029_28030_28031_28032_28033_28034_28035_28036_28037_28038_28039_28040_28041_28042_28043_28044_28045_28046_28047_28048_28049_28050_28051_28052_28053_28054_28055_28056_28057_28058_28059_28060_28061_28062_28063_28064_28065_28066_28067_28068_28069_28070_28071_28072_28073_28074_28075_28076_28077_28078_28079_28080_28081_28082_28083_28084_28085_28086_28087_28088_28089_28090_28091_28092_28093_28094_28095_28096_28097_28098_28099_28100_28101_28102_28103_28104_28105_28106_28107_28108_28109_28110_28111_28112_28113_28114_28115_28116_28117_28118_28119_28120_28121_28122_28123_28124_28125_28126_28127_28128_28129_28130_28131_28132_28133_28134_28135_28136_28137_28138_28139_28140_28141_28142_28143_28144_28145_28146_28147_28148_28149_28150_28151_28152_28153_28154_28155_28156_28157_28158_28159_28160_28161_28162_28163_28164_28165_28166_28167_28168_28169_28170_28171_28172_28173_28174_28175_28176_28177_28178_28179_28180_28181_28182_28183_28184_28185_28186_28187_28188_28189_28190_28191_28192_28193_28194_28195_28196_28197_28198_28199_28200_28201_28202_28203_28204_28205_28206_28207_28208_28209_28210_28211_28212_28213_28214_28215_28216_28217_28218_28219_28220_28221_28222_28223_28224_28225_28226_28227_28228_28229_28230_28231_28232_28233_28234_28235_28236_28237_28238_28239_28240_28241_28242_28243_28244_28245_28246_28247_28248_28249_28250_28251_28252_28253_28254_28255_28256_28257_28258_28259_28260_28261_28262_28263_28264_28265_28266_28267_28268_28269_28270_28271_28272_28273_28274_28275_28276_28277_28278_28279_28280_28281_28282_28283_28284_28285_28286_28287_28288_28289_28290_28291_28292_28293_28294_28295_28296_28297_28298_28299_28300_28301_28302_28303_28304_28305_28306_28307_28308_28309_28310_28311_28312_28313_28314_28315_28316_28317_28318_28319_28320_28321_28322_28323_28324_28325_28326_28327_28328_28329_28330_28331_28332_28333_28334_28335_28336_28337_28338_28339_28340_28341_28342_28343_28344_28345_28346_28347_28348_28349_28350_28351_28352_28353_28354_28355_28356_28357_28358_28359_28360_28361_28362_28363_28364_28365_28366_28367_28368_28369_28370_28371_28372_28373_28374_28375_28376_28377_28378_28379_28380_28381_28382_28383_28384_28385_28386_28387_28388_28389_28390_28391_28392_28393_28394_28395_28396_28397_28398_28399_28400_28401_28402_28403_28404_28405_28406_28407_28408_28409_28410_28411_28412_28413_28414_28415_28416_28417_28418_28419_28420_28421_28422_28423_28424_28425_28426_28427_28428_28429_28430_28431_28432_28433_28434_28435_28436_28437_28438_28439_28440_28441_28442_28443_28444_28445_28446_28447_28448_28449_28450_28451_28452_28453_28454_28455_28456_28457_28458_28459_28460_28461_28462_28463_28464_28465_28466_28467_28468_28469_28470_28471_28472_28473_28474_28475_28476_28477_28478_28479_28480_28481_28482_28483_28484_28485_28486_28487_28488_28489_28490_28491_28492_28493_28494_28495_28496_28497_28498_28499_28500_28501_28502_28503_28504_28505_28506_28507_28508_28509_28510_28511_28512_28513_28514_28515_28516_28517_28518_28519_28520_28521_28522_28523_28524_28525_28526_28527_28528_28529_28530_28531_28532_28533_28534_28535_28536_28537_28538_28539_28540_28541_28542_28543_28544_28545_28546_28547_28548_28549_28550_28551_28552_28553_28554_28555_28556_28557_28558_28559_28560_28561_28562_28563_28564_28565_28566_28567_28568_28569_28570_28571_28572_28573_28574_28575_28576_28577_28578_28579_28580_28581_28582_28583_28584_28585_28586_28587_28588_28589_28590_28591_28592_28593_28594_28595_28596_28597_28598_28599_28600_28601_28602_28603_28604_28605_28606_28607_28608_28609_28610_28611_28612_28613_28614_28615_28616_28617_28618_28619_28620_28621_28622_28623_28624_28625_28626_28627_28628_28629_28630_28631_28632_28633_28634_28635_28636_28637_28638_28639_28640_28641_28642_28643_28644_28645_28646_28647_28648_28649_28650_28651_28652_28653_28654_28655_28656_28657_28658_28659_28660_28661_28662_28663_28664_28665_28666_28667_28668_28669_28670_28671_28672_28673_28674_28675_28676_28677_28678_28679_28680_28681_28682_28683_28684_28685_28686_28687_28688_28689_28690_28691_28692_28693_28694_28695_28696_28697_28698_28699_28700_28701_28702_28703_28704_28705_28706_28707_28708_28709_28710_28711_28712_28713_28714_28715_28716_28717_28718_28719_28720_28721_28722_28723_28724_28725_28726_28727_28728_28729_28730_28731_28732_28733_28734_28735_28736_28737_28738_28739_28740_28741_28742_28743_28744_28745_28746_28747_28748_28749_28750_28751_28752_28753_28754_28755_28756_28757_28758_28759_28760_28761_28762_28763_28764_28765_28766_28767_28768_28769_28770_28771_28772_28773_28774_28775_28776_28777_28778_28779_28780_28781_28782_28783_28784_28785_28786_28787_28788_28789_28790_28791_28792_28793_28794_28795_28796_28797_28798_28799_28800_28801_28802_28803_28804_28805_28806_28807_28808_28809_28810_28811_28812_28813_28814_28815_28816_28817_28818_28819_28820_28821_28822_28823_28824_28825_28826_28827_28828_28829_28830_28831_28832_28833_28834_28835_28836_28837_28838_28839_28840_28841_28842_28843_28844_28845_28846_28847_28848_28849_28850_28851_28852_28853_28854_28855_28856_28857_28858_28859_28860_28861_28862_28863_28864_28865_28866_28867_28868_28869_28870_28871_28872_28873_28874_28875_28876_28877_28878_28879_28880_28881_28882_28883_28884_28885_28886_28887_28888_28889_28890_28891_28892_28893_28894_28895_28896_28897_28898_28899_28900_28901_28902_28903_28904_28905_28906_28907_28908_28909_28910_28911_28912_28913_28914_28915_28916_28917_28918_28919_28920_28921_28922_28923_28924_28925_28926_28927_28928_28929_28930_28931_28932_28933_28934_28935_28936_28937_28938_28939_28940_28941_28942_28943_28944_28945_28946_28947_28948_28949_28950_28951_28952_28953_28954_28955_28956_28957_28958_28959_28960_28961_28962_28963_28964_28965_28966_28967_28968_28969_28970_28971_28972_28973_28974_28975_28976_28977_28978_28979_28980_28981_28982_28983_28984_28985_28986_28987_28988_28989_28990_28991_28992_28993_28994_28995_28996_28997_28998_28999_29000_29001_29002_29003_29004_29005_29006_29007_29008_29009_29010_29011_29012_29013_29014_29015_29016_29017_29018_29019_29020_29021_29022_29023_29024_29025_29026_29027_29028_29029_29030_29031_29032_29033_29034_29035_29036_29037_29038_29039_29040_29041_29042_29043_29044_29045_29046_29047_29048_29049_29050_29051_29052_29053_29054_29055_29056_29057_29058_29059_29060_29061_29062_29063_29064_29065_29066_29067_29068_29069_29070_29071_29072_29073_29074_29075_29076_29077_29078_29079_29080_29081_29082_29083_29084_29085_29086_29087_29088_29089_29090_29091_29092_29093_29094_29095_29096_29097_29098_29099_29100_29101_29102_29103_29104_29105_29106_29107_29108_29109_29110_29111_29112_29113_29114_29115_29116_29117_29118_29119_29120_29121_29122_29123_29124_29125_29126_29127_29128_29129_29130_29131_29132_29133_29134_29135_29136_29137_29138_29139_29140_29141_29142_29143_29144_29145_29146_29147_29148_29149_29150_29151_29152_29153_29154_29155_29156_29157_29158_29159_29160_29161_29162_29163_29164_29165_29166_29167_29168_29169_29170_29171_29172_29173_29174_29175_29176_29177_29178_29179_29180_29181_29182_29183_29184_29185_29186_29187_29188_29189_29190_29191_29192_29193_29194_29195_29196_29197_29198_29199_29200_29201_29202_29203_29204_29205_29206_29207_29208_29209_29210_29211_29212_29213_29214_29215_29216_29217_29218_29219_29220_29221_29222_29223_29224_29225_29226_29227_29228_29229_29230_29231_29232_29233_29234_29235_29236_29237_29238_29239_29240_29241_29242_29243_29244_29245_29246_29247_29248_29249_29250_29251_29252_29253_29254_29255_29256_29257_29258_29259_29260_29261_29262_29263_29264_29265_29266_29267_29268_29269_29270_29271_29272_29273_29274_29275_29276_29277_29278_29279_29280_29281_29282_29283_29284_29285_29286_29287_29288_29289_29290_29291_29292_29293_29294_29295_29296_29297_29298_29299_29300_29301_29302_29303_29304_29305_29306_29307_29308_29309_29310_29311_29312_29313_29314_29315_29316_29317_29318_29319_29320_29321_29322_29323_29324_29325_29326_29327_29328_29329_29330_29331_29332_29333_29334_29335_29336_29337_29338_29339_29340_29341_29342_29343_29344_29345_29346_29347_29348_29349_29350_29351_29352_29353_29354_29355_29356_29357_29358_29359_29360_29361_29362_29363_29364_29365_29366_29367_29368_29369_29370_29371_29372_29373_29374_29375_29376_29377_29378_29379_29380_29381_29382_29383_29384_29385_29386_29387_29388_29389_29390_29391_29392_29393_29394_29395_29396_29397_29398_29399_29400_29401_29402_29403_29404_29405_29406_29407_29408_29409_29410_29411_29412_29413_29414_29415_29416_29417_29418_29419_29420_29421_29422_29423_29424_29425_29426_29427_29428_29429_29430_29431_29432_29433_29434_29435_29436_29437_29438_29439_29440_29441_29442_29443_29444_29445_29446_29447_29448_29449_29450_29451_29452_29453_29454_29455_29456_29457_29458_29459_29460_29461_29462_29463_29464_29465_29466_29467_29468_29469_29470_29471_29472_29473_29474_29475_29476_29477_29478_29479_29480_29481_29482_29483_29484_29485_29486_29487_29488_29489_29490_29491_29492_29493_29494_29495_29496_29497_29498_29499_29500_29501_29502_29503_29504_29505_29506_29507_29508_29509_29510_29511_29512_29513_29514_29515_29516_29517_29518_29519_29520_29521_29522_29523_29524_29525_29526_29527_29528_29529_29530_29531_29532_29533_29534_29535_29536_29537_29538_29539_29540_29541_29542_29543_29544_29545_29546_29547_29548_29549_29550_29551_29552_29553_29554_29555_29556_29557_29558_29559_29560_29561_29562_29563_29564_29565_29566_29567_29568_29569_29570_29571_29572_29573_29574_29575_29576_29577_29578_29579_29580_29581_29582_29583_29584_29585_29586_29587_29588_29589_29590_29591_29592_29593_29594_29595_29596_29597_29598_29599_29600_29601_29602_29603_29604_29605_29606_29607_29608_29609_29610_29611_29612_29613_29614_29615_29616_29617_29618_29619_29620_29621_29622_29623_29624_29625_29626_29627_29628_29629_29630_29631_29632_29633_29634_29635_29636_29637_29638_29639_29640_29641_29642_29643_29644_29645_29646_29647_29648_29649_29650_29651_29652_29653_29654_29655_29656_29657_29658_29659_29660_29661_29662_29663_29664_29665_29666_29667_29668_29669_29670_29671_29672_29673_29674_29675_29676_29677_29678_29679_29680_29681_29682_29683_29684_29685_29686_29687_29688_29689_29690_29691_29692_29693_29694_29695_29696_29697_29698_29699_29700_29701_29702_29703_29704_29705_29706_29707_29708_29709_29710_29711_29712_29713_29714_29715_29716_29717_29718_29719_29720_29721_29722_29723_29724_29725_29726_29727_29728_29729_29730_29731_29732_29733_29734_29735_29736_29737_29738_29739_29740_29741_29742_29743_29744_29745_29746_29747_29748_29749_29750_29751_29752_29753_29754_29755_29756_29757_29758_29759_29760_29761_29762_29763_29764_29765_29766_29767_29768_29769_29770_29771_29772_29773_29774_29775_29776_29777_29778_29779_29780_29781_29782_29783_29784_29785_29786_29787_29788_29789_29790_29791_29792_29793_29794_29795_29796_29797_29798_29799_29800_29801_29802_29803_29804_29805_29806_29807_29808_29809_29810_29811_29812_29813_29814_29815_29816_29817_29818_29819_29820_29821_29822_29823_29824_29825_29826_29827_29828_29829_29830_29831_29832_29833_29834_29835_29836_29837_29838_29839_29840_29841_29842_29843_29844_29845_29846_29847_29848_29849_29850_29851_29852_29853_29854_29855_29856_29857_29858_29859_29860_29861_29862_29863_29864_29865_29866_29867_29868_29869_29870_29871_29872_29873_29874_29875_29876_29877_29878_29879_29880_29881_29882_29883_29884_29885_29886_29887_29888_29889_29890_29891_29892_29893_29894_29895_29896_29897_29898_29899_29900_29901_29902_29903_29904_29905_29906_29907_29908_29909_29910_29911_29912_29913_29914_29915_29916_29917_29918_29919_29920_29921_29922_29923_29924_29925_29926_29927_29928_29929_29930_29931_29932_29933_29934_29935_29936_29937_29938_29939_29940_29941_29942_29943_29944_29945_29946_29947_29948_29949_29950_29951_29952_29953_29954_29955_29956_29957_29958_29959_29960_29961_29962_29963_29964_29965_29966_29967_29968_29969_29970_29971_29972_29973_29974_29975_29976_29977_29978_29979_29980_29981_29982_29983_29984_29985_29986_29987_29988_29989_29990_29991_29992_29993_29994_29995_29996_29997_29998_29999_30000_30001_30002_30003_30004_30005_30006_30007_30008_30009_30010_30011_30012_30013_30014_30015_30016_30017_30018_30019_30020_30021_30022_30023_30024_30025_30026_30027_30028_30029_30030_30031_30032_30033_30034_30035_30036_30037_30038_30039_30040_30041_30042_30043_30044_30045_30046_30047_30048_30049_30050_30051_30052_30053_30054_30055_30056_30057_30058_30059_30060_30061_30062_30063_30064_30065_30066_30067_30068_30069_30070_30071_30072_30073_30074_30075_30076_30077_30078_30079_30080_30081_30082_30083_30084_30085_30086_30087_30088_30089_30090_30091_30092_30093_30094_30095_30096_30097_30098_30099_30100_30101_30102_30103_30104_30105_30106_30107_30108_30109_30110_30111_30112_30113_30114_30115_30116_30117_30118_30119_30120_30121_30122_30123_30124_30125_30126_30127_30128_30129_30130_30131_30132_30133_30134_30135_30136_30137_30138_30139_30140_30141_30142_30143_30144_30145_30146_30147_30148_30149_30150_30151_30152_30153_30154_30155_30156_30157_30158_30159_30160_30161_30162_30163_30164_30165_30166_30167_30168_30169_30170_30171_30172_30173_30174_30175_30176_30177_30178_30179_30180_30181_30182_30183_30184_30185_30186_30187_30188_30189_30190_30191_30192_30193_30194_30195_30196_30197_30198_30199_30200_30201_30202_30203_30204_30205_30206_30207_30208_30209_30210_30211_30212_30213_30214_30215_30216_30217_30218_30219_30220_30221_30222_30223_30224_30225_30226_30227_30228_30229_30230_30231_30232_30233_30234_30235_30236_30237_30238_30239_30240_30241_30242_30243_30244_30245_30246_30247_30248_30249_30250_30251_30252_30253_30254_30255_30256_30257_30258_30259_30260_30261_30262_30263_30264_30265_30266_30267_30268_30269_30270_30271_30272_30273_30274_30275_30276_30277_30278_30279_30280_30281_30282_30283_30284_30285_30286_30287_30288_30289_30290_30291_30292_30293_30294_30295_30296_30297_30298_30299_30300_30301_30302_30303_30304_30305_30306_30307_30308_30309_30310_30311_30312_30313_30314_30315_30316_30317_30318_30319_30320_30321_30322_30323_30324_30325_30326_30327_30328_30329_30330_30331_30332_30333_30334_30335_30336_30337_30338_30339_30340_30341_30342_30343_30344_30345_30346_30347_30348_30349_30350_30351_30352_30353_30354_30355_30356_30357_30358_30359_30360_30361_30362_30363_30364_30365_30366_30367_30368_30369_30370_30371_30372_30373_30374_30375_30376_30377_30378_30379_30380_30381_30382_30383_30384_30385_30386_30387_30388_30389_30390_30391_30392_30393_30394_30395_30396_30397_30398_30399_30400_30401_30402_30403_30404_30405_30406_30407_30408_30409_30410_30411_30412_30413_30414_30415_30416_30417_30418_30419_30420_30421_30422_30423_30424_30425_30426_30427_30428_30429_30430_30431_30432_30433_30434_30435_30436_30437_30438_30439_30440_30441_30442_30443_30444_30445_30446_30447_30448_30449_30450_30451_30452_30453_30454_30455_30456_30457_30458_30459_30460_30461_30462_30463_30464_30465_30466_30467_30468_30469_30470_30471_30472_30473_30474_30475_30476_30477_30478_30479_30480_30481_30482_30483_30484_30485_30486_30487_30488_30489_30490_30491_30492_30493_30494_30495_30496_30497_30498_30499_30500_30501_30502_30503_30504_30505_30506_30507_30508_30509_30510_30511_30512_30513_30514_30515_30516_30517_30518_30519_30520_30521_30522_30523_30524_30525_30526_30527_30528_30529_30530_30531_30532_30533_30534_30535_30536_30537_30538_30539_30540_30541_30542_30543_30544_30545_30546_30547_30548_30549_30550_30551_30552_30553_30554_30555_30556_30557_30558_30559_30560_30561_30562_30563_30564_30565_30566_30567_30568_30569_30570_30571_30572_30573_30574_30575_30576_30577_30578_30579_30580_30581_30582_30583_30584_30585_30586_30587_30588_30589_30590_30591_30592_30593_30594_30595_30596_30597_30598_30599_30600_30601_30602_30603_30604_30605_30606_30607_30608_30609_30610_30611_30612_30613_30614_30615_30616_30617_30618_30619_30620_30621_30622_30623_30624_30625_30626_30627_30628_30629_30630_30631_30632_30633_30634_30635_30636_30637_30638_30639_30640_30641_30642_30643_30644_30645_30646_30647_30648_30649_30650_30651_30652_30653_30654_30655_30656_30657_30658_30659_30660_30661_30662_30663_30664_30665_30666_30667_30668_30669_30670_30671_30672_30673_30674_30675_30676_30677_30678_30679_30680_30681_30682_30683_30684_30685_30686_30687_30688_30689_30690_30691_30692_30693_30694_30695_30696_30697_30698_30699_30700_30701_30702_30703_30704_30705_30706_30707_30708_30709_30710_30711_30712_30713_30714_30715_30716_30717_30718_30719_30720_30721_30722_30723_30724_30725_30726_30727_30728_30729_30730_30731_30732_30733_30734_30735_30736_30737_30738_30739_30740_30741_30742_30743_30744_30745_30746_30747_30748_30749_30750_30751_30752_30753_30754_30755_30756_30757_30758_30759_30760_30761_30762_30763_30764_30765_30766_30767_30768_30769_30770_30771_30772_30773_30774_30775_30776_30777_30778_30779_30780_30781_30782_30783_30784_30785_30786_30787_30788_30789_30790_30791_30792_30793_30794_30795_30796_30797_30798_30799_30800_30801_30802_30803_30804_30805_30806_30807_30808_30809_30810_30811_30812_30813_30814_30815_30816_30817_30818_30819_30820_30821_30822_30823_30824_30825_30826_30827_30828_30829_30830_30831_30832_30833_30834_30835_30836_30837_30838_30839_30840_30841_30842_30843_30844_30845_30846_30847_30848_30849_30850_30851_30852_30853_30854_30855_30856_30857_30858_30859_30860_30861_30862_30863_30864_30865_30866_30867_30868_30869_30870_30871_30872_30873_30874_30875_30876_30877_30878_30879_30880_30881_30882_30883_30884_30885_30886_30887_30888_30889_30890_30891_30892_30893_30894_30895_30896_30897_30898_30899_30900_30901_30902_30903_30904_30905_30906_30907_30908_30909_30910_30911_30912_30913_30914_30915_30916_30917_30918_30919_30920_30921_30922_30923_30924_30925_30926_30927_30928_30929_30930_30931_30932_30933_30934_30935_30936_30937_30938_30939_30940_30941_30942_30943_30944_30945_30946_30947_30948_30949_30950_30951_30952_30953_30954_30955_30956_30957_30958_30959_30960_30961_30962_30963_30964_30965_30966_30967_30968_30969_30970_30971_30972_30973_30974_30975_30976_30977_30978_30979_30980_30981_30982_30983_30984_30985_30986_30987_30988_30989_30990_30991_30992_30993_30994_30995_30996_30997_30998_30999_31000_31001_31002_31003_31004_31005_31006_31007_31008_31009_31010_31011_31012_31013_31014_31015_31016_31017_31018_31019_31020_31021_31022_31023_31024_31025_31026_31027_31028_31029_31030_31031_31032_31033_31034_31035_31036_31037_31038_31039_31040_31041_31042_31043_31044_31045_31046_31047_31048_31049_31050_31051_31052_31053_31054_31055_31056_31057_31058_31059_31060_31061_31062_31063_31064_31065_31066_31067_31068_31069_31070_31071_31072_31073_31074_31075_31076_31077_31078_31079_31080_31081_31082_31083_31084_31085_31086_31087_31088_31089_31090_31091_31092_31093_31094_31095_31096_31097_31098_31099_31100_31101_31102_31103_31104_31105_31106_31107_31108_31109_31110_31111_31112_31113_31114_31115_31116_31117_31118_31119_31120_31121_31122_31123_31124_31125_31126_31127_31128_31129_31130_31131_31132_31133_31134_31135_31136_31137_31138_31139_31140_31141_31142_31143_31144_31145_31146_31147_31148_31149_31150_31151_31152_31153_31154_31155_31156_31157_31158_31159_31160_31161_31162_31163_31164_31165_31166_31167_31168_31169_31170_31171_31172_31173_31174_31175_31176_31177_31178_31179_31180_31181_31182_31183_31184_31185_31186_31187_31188_31189_31190_31191_31192_31193_31194_31195_31196_31197_31198_31199_31200_31201_31202_31203_31204_31205_31206_31207_31208_31209_31210_31211_31212_31213_31214_31215_31216_31217_31218_31219_31220_31221_31222_31223_31224_31225_31226_31227_31228_31229_31230_31231_31232_31233_31234_31235_31236_31237_31238_31239_31240_31241_31242_31243_31244_31245_31246_31247_31248_31249_31250_31251_31252_31253_31254_31255_31256_31257_31258_31259_31260_31261_31262_31263_31264_31265_31266_31267_31268_31269_31270_31271_31272_31273_31274_31275_31276_31277_31278_31279_31280_31281_31282_31283_31284_31285_31286_31287_31288_31289_31290_31291_31292_31293_31294_31295_31296_31297_31298_31299_31300_31301_31302_31303_31304_31305_31306_31307_31308_31309_31310_31311_31312_31313_31314_31315_31316_31317_31318_31319_31320_31321_31322_31323_31324_31325_31326_31327_31328_31329_31330_31331_31332_31333_31334_31335_31336_31337_31338_31339_31340_31341_31342_31343_31344_31345_31346_31347_31348_31349_31350_31351_31352_31353_31354_31355_31356_31357_31358_31359_31360_31361_31362_31363_31364_31365_31366_31367_31368_31369_31370_31371_31372_31373_31374_31375_31376_31377_31378_31379_31380_31381_31382_31383_31384_31385_31386_31387_31388_31389_31390_31391_31392_31393_31394_31395_31396_31397_31398_31399_31400_31401_31402_31403_31404_31405_31406_31407_31408_31409_31410_31411_31412_31413_31414_31415_31416_31417_31418_31419_31420_31421_31422_31423_31424_31425_31426_31427_31428_31429_31430_31431_31432_31433_31434_31435_31436_31437_31438_31439_31440_31441_31442_31443_31444_31445_31446_31447_31448_31449_31450_31451_31452_31453_31454_31455_31456_31457_31458_31459_31460_31461_31462_31463_31464_31465_31466_31467_31468_31469_31470_31471_31472_31473_31474_31475_31476_31477_31478_31479_31480_31481_31482_31483_31484_31485_31486_31487_31488_31489_31490_31491_31492_31493_31494_31495_31496_31497_31498_31499_31500_31501_31502_31503_31504_31505_31506_31507_31508_31509_31510_31511_31512_31513_31514_31515_31516_31517_31518_31519_31520_31521_31522_31523_31524_31525_31526_31527_31528_31529_31530_31531_31532_31533_31534_31535_31536_31537_31538_31539_31540_31541_31542_31543_31544_31545_31546_31547_31548_31549_31550_31551_31552_31553_31554_31555_31556_31557_31558_31559_31560_31561_31562_31563_31564_31565_31566_31567_31568_31569_31570_31571_31572_31573_31574_31575_31576_31577_31578_31579_31580_31581_31582_31583_31584_31585_31586_31587_31588_31589_31590_31591_31592_31593_31594_31595_31596_31597_31598_31599_31600_31601_31602_31603_31604_31605_31606_31607_31608_31609_31610_31611_31612_31613_31614_31615_31616_31617_31618_31619_31620_31621_31622_31623_31624_31625_31626_31627_31628_31629_31630_31631_31632_31633_31634_31635_31636_31637_31638_31639_31640_31641_31642_31643_31644_31645_31646_31647_31648_31649_31650_31651_31652_31653_31654_31655_31656_31657_31658_31659_31660_31661_31662_31663_31664_31665_31666_31667_31668_31669_31670_31671_31672_31673_31674_31675_31676_31677_31678_31679_31680_31681_31682_31683_31684_31685_31686_31687_31688_31689_31690_31691_31692_31693_31694_31695_31696_31697_31698_31699_31700_31701_31702_31703_31704_31705_31706_31707_31708_31709_31710_31711_31712_31713_31714_31715_31716_31717_31718_31719_31720_31721_31722_31723_31724_31725_31726_31727_31728_31729_31730_31731_31732_31733_31734_31735_31736_31737_31738_31739_31740_31741_31742_31743_31744_31745_31746_31747_31748_31749_31750_31751_31752_31753_31754_31755_31756_31757_31758_31759_31760_31761_31762_31763_31764_31765_31766_31767_31768_31769_31770_31771_31772_31773_31774_31775_31776_31777_31778_31779_31780_31781_31782_31783_31784_31785_31786_31787_31788_31789_31790_31791_31792_31793_31794_31795_31796_31797_31798_31799_31800_31801_31802_31803_31804_31805_31806_31807_31808_31809_31810_31811_31812_31813_31814_31815_31816_31817_31818_31819_31820_31821_31822_31823_31824_31825_31826_31827_31828_31829_31830_31831_31832_31833_31834_31835_31836_31837_31838_31839_31840_31841_31842_31843_31844_31845_31846_31847_31848_31849_31850_31851_31852_31853_31854_31855_31856_31857_31858_31859_31860_31861_31862_31863_31864_31865_31866_31867_31868_31869_31870_31871_31872_31873_31874_31875_31876_31877_31878_31879_31880_31881_31882_31883_31884_31885_31886_31887_31888_31889_31890_31891_31892_31893_31894_31895_31896_31897_31898_31899_31900_31901_31902_31903_31904_31905_31906_31907_31908_31909_31910_31911_31912_31913_31914_31915_31916_31917_31918_31919_31920_31921_31922_31923_31924_31925_31926_31927_31928_31929_31930_31931_31932_31933_31934_31935_31936_31937_31938_31939_31940_31941_31942_31943_31944_31945_31946_31947_31948_31949_31950_31951_31952_31953_31954_31955_31956_31957_31958_31959_31960_31961_31962_31963_31964_31965_31966_31967_31968_31969_31970_31971_31972_31973_31974_31975_31976_31977_31978_31979_31980_31981_31982_31983_31984_31985_31986_31987_31988_31989_31990_31991_31992_31993_31994_31995_31996_31997_31998_31999_32000_32001_32002_32003_32004_32005_32006_32007_32008_32009_32010_32011_32012_32013_32014_32015_32016_32017_32018_32019_32020_32021_32022_32023_32024_32025_32026_32027_32028_32029_32030_32031_32032_32033_32034_32035_32036_32037_32038_32039_32040_32041_32042_32043_32044_32045_32046_32047_32048_32049_32050_32051_32052_32053_32054_32055_32056_32057_32058_32059_32060_32061_32062_32063_32064_32065_32066_32067_32068_32069_32070_32071_32072_32073_32074_32075_32076_32077_32078_32079_32080_32081_32082_32083_32084_32085_32086_32087_32088_32089_32090_32091_32092_32093_32094_32095_32096_32097_32098_32099_32100_32101_32102_32103_32104_32105_32106_32107_32108_32109_32110_32111_32112_32113_32114_32115_32116_32117_32118_32119_32120_32121_32122_32123_32124_32125_32126_32127_32128_32129_32130_32131_32132_32133_32134_32135_32136_32137_32138_32139_32140_32141_32142_32143_32144_32145_32146_32147_32148_32149_32150_32151_32152_32153_32154_32155_32156_32157_32158_32159_32160_32161_32162_32163_32164_32165_32166_32167_32168_32169_32170_32171_32172_32173_32174_32175_32176_32177_32178_32179_32180_32181_32182_32183_32184_32185_32186_32187_32188_32189_32190_32191_32192_32193_32194_32195_32196_32197_32198_32199_32200_32201_32202_32203_32204_32205_32206_32207_32208_32209_32210_32211_32212_32213_32214_32215_32216_32217_32218_32219_32220_32221_32222_32223_32224_32225_32226_32227_32228_32229_32230_32231_32232_32233_32234_32235_32236_32237_32238_32239_32240_32241_32242_32243_32244_32245_32246_32247_32248_32249_32250_32251_32252_32253_32254_32255_32256_32257_32258_32259_32260_32261_32262_32263_32264_32265_32266_32267_32268_32269_32270_32271_32272_32273_32274_32275_32276_32277_32278_32279_32280_32281_32282_32283_32284_32285_32286_32287_32288_32289_32290_32291_32292_32293_32294_32295_32296_32297_32298_32299_32300_32301_32302_32303_32304_32305_32306_32307_32308_32309_32310_32311_32312_32313_32314_32315_32316_32317_32318_32319_32320_32321_32322_32323_32324_32325_32326_32327_32328_32329_32330_32331_32332_32333_32334_32335_32336_32337_32338_32339_32340_32341_32342_32343_32344_32345_32346_32347_32348_32349_32350_32351_32352_32353_32354_32355_32356_32357_32358_32359_32360_32361_32362_32363_32364_32365_32366_32367_32368_32369_32370_32371_32372_32373_32374_32375_32376_32377_32378_32379_32380_32381_32382_32383_32384_32385_32386_32387_32388_32389_32390_32391_32392_32393_32394_32395_32396_32397_32398_32399_32400_32401_32402_32403_32404_32405_32406_32407_32408_32409_32410_32411_32412_32413_32414_32415_32416_32417_32418_32419_32420_32421_32422_32423_32424_32425_32426_32427_32428_32429_32430_32431_32432_32433_32434_32435_32436_32437_32438_32439_32440_32441_32442_32443_32444_32445_32446_32447_32448_32449_32450_32451_32452_32453_32454_32455_32456_32457_32458_32459_32460_32461_32462_32463_32464_32465_32466_32467_32468_32469_32470_32471_32472_32473_32474_32475_32476_32477_32478_32479_32480_32481_32482_32483_32484_32485_32486_32487_32488_32489_32490_32491_32492_32493_32494_32495_32496_32497_32498_32499_32500_32501_32502_32503_32504_32505_32506_32507_32508_32509_32510_32511_32512_32513_32514_32515_32516_32517_32518_32519_32520_32521_32522_32523_32524_32525_32526_32527_32528_32529_32530_32531_32532_32533_32534_32535_32536_32537_32538_32539_32540_32541_32542_32543_32544_32545_32546_32547_32548_32549_32550_32551_32552_32553_32554_32555_32556_32557_32558_32559_32560_32561_32562_32563_32564_32565_32566_32567_32568_32569_32570_32571_32572_32573_32574_32575_32576_32577_32578_32579_32580_32581_32582_32583_32584_32585_32586_32587_32588_32589_32590_32591_32592_32593_32594_32595_32596_32597_32598_32599_32600_32601_32602_32603_32604_32605_32606_32607_32608_32609_32610_32611_32612_32613_32614_32615_32616_32617_32618_32619_32620_32621_32622_32623_32624_32625_32626_32627_32628_32629_32630_32631_32632_32633_32634_32635_32636_32637_32638_32639_32640_32641_32642_32643_32644_32645_32646_32647_32648_32649_32650_32651_32652_32653_32654_32655_32656_32657_32658_32659_32660_32661_32662_32663_32664_32665_32666_32667_32668_32669_32670_32671_32672_32673_32674_32675_32676_32677_32678_32679_32680_32681_32682_32683_32684_32685_32686_32687_32688_32689_32690_32691_32692_32693_32694_32695_32696_32697_32698_32699_32700_32701_32702_32703_32704_32705_32706_32707_32708_32709_32710_32711_32712_32713_32714_32715_32716_32717_32718_32719_32720_32721_32722_32723_32724_32725_32726_32727_32728_32729_32730_32731_32732_32733_32734_32735_32736_32737_32738_32739_32740_32741_32742_32743_32744_32745_32746_32747_32748_32749_32750_32751_32752_32753_32754_32755_32756_32757_32758_32759_32760_32761_32762_32763_32764_32765_32766_32767_32768_32769_32770_32771_32772_32773_32774_32775_32776_32777_32778_32779_32780_32781_32782_32783_32784_32785_32786_32787_32788_32789_32790_32791_32792_32793_32794_32795_32796_32797_32798_32799_32800_32801_32802_32803_32804_32805_32806_32807_32808_32809_32810_32811_32812_32813_32814_32815_32816_32817_32818_32819_32820_32821_32822_32823_32824_32825_32826_32827_32828_32829_32830_32831_32832_32833_32834_32835_32836_32837_32838_32839_32840_32841_32842_32843_32844_32845_32846_32847_32848_32849_32850_32851_32852_32853_32854_32855_32856_32857_32858_32859_32860_32861_32862_32863_32864_32865_32866_32867_32868_32869_32870_32871_32872_32873_32874_32875_32876_32877_32878_32879_32880_32881_32882_32883_32884_32885_32886_32887_32888_32889_32890_32891_32892_32893_32894_32895_32896_32897_32898_32899_32900_32901_32902_32903_32904_32905_32906_32907_32908_32909_32910_32911_32912_32913_32914_32915_32916_32917_32918_32919_32920_32921_32922_32923_32924_32925_32926_32927_32928_32929_32930_32931_32932_32933_32934_32935_32936_32937_32938_32939_32940_32941_32942_32943_32944_32945_32946_32947_32948_32949_32950_32951_32952_32953_32954_32955_32956_32957_32958_32959_32960_32961_32962_32963_32964_32965_32966_32967_32968_32969_32970_32971_32972_32973_32974_32975_32976_32977_32978_32979_32980_32981_32982_32983_32984_32985_32986_32987_32988_32989_32990_32991_32992_32993_32994_32995_32996_32997_32998_32999_33000_33001_33002_33003_33004_33005_33006_33007_33008_33009_33010_33011_33012_33013_33014_33015_33016_33017_33018_33019_33020_33021_33022_33023_33024_33025_33026_33027_33028_33029_33030_33031_33032_33033_33034_33035_33036_33037_33038_33039_33040_33041_33042_33043_33044_33045_33046_33047_33048_33049_33050_33051_33052_33053_33054_33055_33056_33057_33058_33059_33060_33061_33062_33063_33064_33065_33066_33067_33068_33069_33070_33071_33072_33073_33074_33075_33076_33077_33078_33079_33080_33081_33082_33083_33084_33085_33086_33087_33088_33089_33090_33091_33092_33093_33094_33095_33096_33097_33098_33099_33100_33101_33102_33103_33104_33105_33106_33107_33108_33109_33110_33111_33112_33113_33114_33115_33116_33117_33118_33119_33120_33121_33122_33123_33124_33125_33126_33127_33128_33129_33130_33131_33132_33133_33134_33135_33136_33137_33138_33139_33140_33141_33142_33143_33144_33145_33146_33147_33148_33149_33150_33151_33152_33153_33154_33155_33156_33157_33158_33159_33160_33161_33162_33163_33164_33165_33166_33167_33168_33169_33170_33171_33172_33173_33174_33175_33176_33177_33178_33179_33180_33181_33182_33183_33184_33185_33186_33187_33188_33189_33190_33191_33192_33193_33194_33195_33196_33197_33198_33199_33200_33201_33202_33203_33204_33205_33206_33207_33208_33209_33210_33211_33212_33213_33214_33215_33216_33217_33218_33219_33220_33221_33222_33223_33224_33225_33226_33227_33228_33229_33230_33231_33232_33233_33234_33235_33236_33237_33238_33239_33240_33241_33242_33243_33244_33245_33246_33247_33248_33249_33250_33251_33252_33253_33254_33255_33256_33257_33258_33259_33260_33261_33262_33263_33264_33265_33266_33267_33268_33269_33270_33271_33272_33273_33274_33275_33276_33277_33278_33279_33280_33281_33282_33283_33284_33285_33286_33287_33288_33289_33290_33291_33292_33293_33294_33295_33296_33297_33298_33299_33300_33301_33302_33303_33304_33305_33306_33307_33308_33309_33310_33311_33312_33313_33314_33315_33316_33317_33318_33319_33320_33321_33322_33323_33324_33325_33326_33327_33328_33329_33330_33331_33332_33333_33334_33335_33336_33337_33338_33339_33340_33341_33342_33343_33344_33345_33346_33347_33348_33349_33350_33351_33352_33353_33354_33355_33356_33357_33358_33359_33360_33361_33362_33363_33364_33365_33366_33367_33368_33369_33370_33371_33372_33373_33374_33375_33376_33377_33378_33379_33380_33381_33382_33383_33384_33385_33386_33387_33388_33389_33390_33391_33392_33393_33394_33395_33396_33397_33398_33399_33400_33401_33402_33403_33404_33405_33406_33407_33408_33409_33410_33411_33412_33413_33414_33415_33416_33417_33418_33419_33420_33421_33422_33423_33424_33425_33426_33427_33428_33429_33430_33431_33432_33433_33434_33435_33436_33437_33438_33439_33440_33441_33442_33443_33444_33445_33446_33447_33448_33449_33450_33451_33452_33453_33454_33455_33456_33457_33458_33459_33460_33461_33462_33463_33464_33465_33466_33467_33468_33469_33470_33471_33472_33473_33474_33475_33476_33477_33478_33479_33480_33481_33482_33483_33484_33485_33486_33487_33488_33489_33490_33491_33492_33493_33494_33495_33496_33497_33498_33499_33500_33501_33502_33503_33504_33505_33506_33507_33508_33509_33510_33511_33512_33513_33514_33515_33516_33517_33518_33519_33520_33521_33522_33523_33524_33525_33526_33527_33528_33529_33530_33531_33532_33533_33534_33535_33536_33537_33538_33539_33540_33541_33542_33543_33544_33545_33546_33547_33548_33549_33550_33551_33552_33553_33554_33555_33556_33557_33558_33559_33560_33561_33562_33563_33564_33565_33566_33567_33568_33569_33570_33571_33572_33573_33574_33575_33576_33577_33578_33579_33580_33581_33582_33583_33584_33585_33586_33587_33588_33589_33590_33591_33592_33593_33594_33595_33596_33597_33598_33599_33600_33601_33602_33603_33604_33605_33606_33607_33608_33609_33610_33611_33612_33613_33614_33615_33616_33617_33618_33619_33620_33621_33622_33623_33624_33625_33626_33627_33628_33629_33630_33631_33632_33633_33634_33635_33636_33637_33638_33639_33640_33641_33642_33643_33644_33645_33646_33647_33648_33649_33650_33651_33652_33653_33654_33655_33656_33657_33658_33659_33660_33661_33662_33663_33664_33665_33666_33667_33668_33669_33670_33671_33672_33673_33674_33675_33676_33677_33678_33679_33680_33681_33682_33683_33684_33685_33686_33687_33688_33689_33690_33691_33692_33693_33694_33695_33696_33697_33698_33699_33700_33701_33702_33703_33704_33705_33706_33707_33708_33709_33710_33711_33712_33713_33714_33715_33716_33717_33718_33719_33720_33721_33722_33723_33724_33725_33726_33727_33728_33729_33730_33731_33732_33733_33734_33735_33736_33737_33738_33739_33740_33741_33742_33743_33744_33745_33746_33747_33748_33749_33750_33751_33752_33753_33754_33755_33756_33757_33758_33759_33760_33761_33762_33763_33764_33765_33766_33767_33768_33769_33770_33771_33772_33773_33774_33775_33776_33777_33778_33779_33780_33781_33782_33783_33784_33785_33786_33787_33788_33789_33790_33791_33792_33793_33794_33795_33796_33797_33798_33799_33800_33801_33802_33803_33804_33805_33806_33807_33808_33809_33810_33811_33812_33813_33814_33815_33816_33817_33818_33819_33820_33821_33822_33823_33824_33825_33826_33827_33828_33829_33830_33831_33832_33833_33834_33835_33836_33837_33838_33839_33840_33841_33842_33843_33844_33845_33846_33847_33848_33849_33850_33851_33852_33853_33854_33855_33856_33857_33858_33859_33860_33861_33862_33863_33864_33865_33866_33867_33868_33869_33870_33871_33872_33873_33874_33875_33876_33877_33878_33879_33880_33881_33882_33883_33884_33885_33886_33887_33888_33889_33890_33891_33892_33893_33894_33895_33896_33897_33898_33899_33900_33901_33902_33903_33904_33905_33906_33907_33908_33909_33910_33911_33912_33913_33914_33915_33916_33917_33918_33919_33920_33921_33922_33923_33924_33925_33926_33927_33928_33929_33930_33931_33932_33933_33934_33935_33936_33937_33938_33939_33940_33941_33942_33943_33944_33945_33946_33947_33948_33949_33950_33951_33952_33953_33954_33955_33956_33957_33958_33959_33960_33961_33962_33963_33964_33965_33966_33967_33968_33969_33970_33971_33972_33973_33974_33975_33976_33977_33978_33979_33980_33981_33982_33983_33984_33985_33986_33987_33988_33989_33990_33991_33992_33993_33994_33995_33996_33997_33998_33999_34000_34001_34002_34003_34004_34005_34006_34007_34008_34009_34010_34011_34012_34013_34014_34015_34016_34017_34018_34019_34020_34021_34022_34023_34024_34025_34026_34027_34028_34029_34030_34031_34032_34033_34034_34035_34036_34037_34038_34039_34040_34041_34042_34043_34044_34045_34046_34047_34048_34049_34050_34051_34052_34053_34054_34055_34056_34057_34058_34059_34060_34061_34062_34063_34064_34065_34066_34067_34068_34069_34070_34071_34072_34073_34074_34075_34076_34077_34078_34079_34080_34081_34082_34083_34084_34085_34086_34087_34088_34089_34090_34091_34092_34093_34094_34095_34096_34097_34098_34099_34100_34101_34102_34103_34104_34105_34106_34107_34108_34109_34110_34111_34112_34113_34114_34115_34116_34117_34118_34119_34120_34121_34122_34123_34124_34125_34126_34127_34128_34129_34130_34131_34132_34133_34134_34135_34136_34137_34138_34139_34140_34141_34142_34143_34144_34145_34146_34147_34148_34149_34150_34151_34152_34153_34154_34155_34156_34157_34158_34159_34160_34161_34162_34163_34164_34165_34166_34167_34168_34169_34170_34171_34172_34173_34174_34175_34176_34177_34178_34179_34180_34181_34182_34183_34184_34185_34186_34187_34188_34189_34190_34191_34192_34193_34194_34195_34196_34197_34198_34199_34200_34201_34202_34203_34204_34205_34206_34207_34208_34209_34210_34211_34212_34213_34214_34215_34216_34217_34218_34219_34220_34221_34222_34223_34224_34225_34226_34227_34228_34229_34230_34231_34232_34233_34234_34235_34236_34237_34238_34239_34240_34241_34242_34243_34244_34245_34246_34247_34248_34249_34250_34251_34252_34253_34254_34255_34256_34257_34258_34259_34260_34261_34262_34263_34264_34265_34266_34267_34268_34269_34270_34271_34272_34273_34274_34275_34276_34277_34278_34279_34280_34281_34282_34283_34284_34285_34286_34287_34288_34289_34290_34291_34292_34293_34294_34295_34296_34297_34298_34299_34300_34301_34302_34303_34304_34305_34306_34307_34308_34309_34310_34311_34312_34313_34314_34315_34316_34317_34318_34319_34320_34321_34322_34323_34324_34325_34326_34327_34328_34329_34330_34331_34332_34333_34334_34335_34336_34337_34338_34339_34340_34341_34342_34343_34344_34345_34346_34347_34348_34349_34350_34351_34352_34353_34354_34355_34356_34357_34358_34359_34360_34361_34362_34363_34364_34365_34366_34367_34368_34369_34370_34371_34372_34373_34374_34375_34376_34377_34378_34379_34380_34381_34382_34383_34384_34385_34386_34387_34388_34389_34390_34391_34392_34393_34394_34395_34396_34397_34398_34399_34400_34401_34402_34403_34404_34405_34406_34407_34408_34409_34410_34411_34412_34413_34414_34415_34416_34417_34418_34419_34420_34421_34422_34423_34424_34425_34426_34427_34428_34429_34430_34431_34432_34433_34434_34435_34436_34437_34438_34439_34440_34441_34442_34443_34444_34445_34446_34447_34448_34449_34450_34451_34452_34453_34454_34455_34456_34457_34458_34459_34460_34461_34462_34463_34464_34465_34466_34467_34468_34469_34470_34471_34472_34473_34474_34475_34476_34477_34478_34479_34480_34481_34482_34483_34484_34485_34486_34487_34488_34489_34490_34491_34492_34493_34494_34495_34496_34497_34498_34499_34500_34501_34502_34503_34504_34505_34506_34507_34508_34509_34510_34511_34512_34513_34514_34515_34516_34517_34518_34519_34520_34521_34522_34523_34524_34525_34526_34527_34528_34529_34530_34531_34532_34533_34534_34535_34536_34537_34538_34539_34540_34541_34542_34543_34544_34545_34546_34547_34548_34549_34550_34551_34552_34553_34554_34555_34556_34557_34558_34559_34560_34561_34562_34563_34564_34565_34566_34567_34568_34569_34570_34571_34572_34573_34574_34575_34576_34577_34578_34579_34580_34581_34582_34583_34584_34585_34586_34587_34588_34589_34590_34591_34592_34593_34594_34595_34596_34597_34598_34599_34600_34601_34602_34603_34604_34605_34606_34607_34608_34609_34610_34611_34612_34613_34614_34615_34616_34617_34618_34619_34620_34621_34622_34623_34624_34625_34626_34627_34628_34629_34630_34631_34632_34633_34634_34635_34636_34637_34638_34639_34640_34641_34642_34643_34644_34645_34646_34647_34648_34649_34650_34651_34652_34653_34654_34655_34656_34657_34658_34659_34660_34661_34662_34663_34664_34665_34666_34667_34668_34669_34670_34671_34672_34673_34674_34675_34676_34677_34678_34679_34680_34681_34682_34683_34684_34685_34686_34687_34688_34689_34690_34691_34692_34693_34694_34695_34696_34697_34698_34699_34700_34701_34702_34703_34704_34705_34706_34707_34708_34709_34710_34711_34712_34713_34714_34715_34716_34717_34718_34719_34720_34721_34722_34723_34724_34725_34726_34727_34728_34729_34730_34731_34732_34733_34734_34735_34736_34737_34738_34739_34740_34741_34742_34743_34744_34745_34746_34747_34748_34749_34750_34751_34752_34753_34754_34755_34756_34757_34758_34759_34760_34761_34762_34763_34764_34765_34766_34767_34768_34769_34770_34771_34772_34773_34774_34775_34776_34777_34778_34779_34780_34781_34782_34783_34784_34785_34786_34787_34788_34789_34790_34791_34792_34793_34794_34795_34796_34797_34798_34799_34800_34801_34802_34803_34804_34805_34806_34807_34808_34809_34810_34811_34812_34813_34814_34815_34816_34817_34818_34819_34820_34821_34822_34823_34824_34825_34826_34827_34828_34829_34830_34831_34832_34833_34834_34835_34836_34837_34838_34839_34840_34841_34842_34843_34844_34845_34846_34847_34848_34849_34850_34851_34852_34853_34854_34855_34856_34857_34858_34859_34860_34861_34862_34863_34864_34865_34866_34867_34868_34869_34870_34871_34872_34873_34874_34875_34876_34877_34878_34879_34880_34881_34882_34883_34884_34885_34886_34887_34888_34889_34890_34891_34892_34893_34894_34895_34896_34897_34898_34899_34900_34901_34902_34903_34904_34905_34906_34907_34908_34909_34910_34911_34912_34913_34914_34915_34916_34917_34918_34919_34920_34921_34922_34923_34924_34925_34926_34927_34928_34929_34930_34931_34932_34933_34934_34935_34936_34937_34938_34939_34940_34941_34942_34943_34944_34945_34946_34947_34948_34949_34950_34951_34952_34953_34954_34955_34956_34957_34958_34959_34960_34961_34962_34963_34964_34965_34966_34967_34968_34969_34970_34971_34972_34973_34974_34975_34976_34977_34978_34979_34980_34981_34982_34983_34984_34985_34986_34987_34988_34989_34990_34991_34992_34993_34994_34995_34996_34997_34998_34999_35000_35001_35002_35003_35004_35005_35006_35007_35008_35009_35010_35011_35012_35013_35014_35015_35016_35017_35018_35019_35020_35021_35022_35023_35024_35025_35026_35027_35028_35029_35030_35031_35032_35033_35034_35035_35036_35037_35038_35039_35040_35041_35042_35043_35044_35045_35046_35047_35048_35049_35050_35051_35052_35053_35054_35055_35056_35057_35058_35059_35060_35061_35062_35063_35064_35065_35066_35067_35068_35069_35070_35071_35072_35073_35074_35075_35076_35077_35078_35079_35080_35081_35082_35083_35084_35085_35086_35087_35088_35089_35090_35091_35092_35093_35094_35095_35096_35097_35098_35099_35100_35101_35102_35103_35104_35105_35106_35107_35108_35109_35110_35111_35112_35113_35114_35115_35116_35117_35118_35119_35120_35121_35122_35123_35124_35125_35126_35127_35128_35129_35130_35131_35132_35133_35134_35135_35136_35137_35138_35139_35140_35141_35142_35143_35144_35145_35146_35147_35148_35149_35150_35151_35152_35153_35154_35155_35156_35157_35158_35159_35160_35161_35162_35163_35164_35165_35166_35167_35168_35169_35170_35171_35172_35173_35174_35175_35176_35177_35178_35179_35180_35181_35182_35183_35184_35185_35186_35187_35188_35189_35190_35191_35192_35193_35194_35195_35196_35197_35198_35199_35200_35201_35202_35203_35204_35205_35206_35207_35208_35209_35210_35211_35212_35213_35214_35215_35216_35217_35218_35219_35220_35221_35222_35223_35224_35225_35226_35227_35228_35229_35230_35231_35232_35233_35234_35235_35236_35237_35238_35239_35240_35241_35242_35243_35244_35245_35246_35247_35248_35249_35250_35251_35252_35253_35254_35255_35256_35257_35258_35259_35260_35261_35262_35263_35264_35265_35266_35267_35268_35269_35270_35271_35272_35273_35274_35275_35276_35277_35278_35279_35280_35281_35282_35283_35284_35285_35286_35287_35288_35289_35290_35291_35292_35293_35294_35295_35296_35297_35298_35299_35300_35301_35302_35303_35304_35305_35306_35307_35308_35309_35310_35311_35312_35313_35314_35315_35316_35317_35318_35319_35320_35321_35322_35323_35324_35325_35326_35327_35328_35329_35330_35331_35332_35333_35334_35335_35336_35337_35338_35339_35340_35341_35342_35343_35344_35345_35346_35347_35348_35349_35350_35351_35352_35353_35354_35355_35356_35357_35358_35359_35360_35361_35362_35363_35364_35365_35366_35367_35368_35369_35370_35371_35372_35373_35374_35375_35376_35377_35378_35379_35380_35381_35382_35383_35384_35385_35386_35387_35388_35389_35390_35391_35392_35393_35394_35395_35396_35397_35398_35399_35400_35401_35402_35403_35404_35405_35406_35407_35408_35409_35410_35411_35412_35413_35414_35415_35416_35417_35418_35419_35420_35421_35422_35423_35424_35425_35426_35427_35428_35429_35430_35431_35432_35433_35434_35435_35436_35437_35438_35439_35440_35441_35442_35443_35444_35445_35446_35447_35448_35449_35450_35451_35452_35453_35454_35455_35456_35457_35458_35459_35460_35461_35462_35463_35464_35465_35466_35467_35468_35469_35470_35471_35472_35473_35474_35475_35476_35477_35478_35479_35480_35481_35482_35483_35484_35485_35486_35487_35488_35489_35490_35491_35492_35493_35494_35495_35496_35497_35498_35499_35500_35501_35502_35503_35504_35505_35506_35507_35508_35509_35510_35511_35512_35513_35514_35515_35516_35517_35518_35519_35520_35521_35522_35523_35524_35525_35526_35527_35528_35529_35530_35531_35532_35533_35534_35535_35536_35537_35538_35539_35540_35541_35542_35543_35544_35545_35546_35547_35548_35549_35550_35551_35552_35553_35554_35555_35556_35557_35558_35559_35560_35561_35562_35563_35564_35565_35566_35567_35568_35569_35570_35571_35572_35573_35574_35575_35576_35577_35578_35579_35580_35581_35582_35583_35584_35585_35586_35587_35588_35589_35590_35591_35592_35593_35594_35595_35596_35597_35598_35599_35600_35601_35602_35603_35604_35605_35606_35607_35608_35609_35610_35611_35612_35613_35614_35615_35616_35617_35618_35619_35620_35621_35622_35623_35624_35625_35626_35627_35628_35629_35630_35631_35632_35633_35634_35635_35636_35637_35638_35639_35640_35641_35642_35643_35644_35645_35646_35647_35648_35649_35650_35651_35652_35653_35654_35655_35656_35657_35658_35659_35660_35661_35662_35663_35664_35665_35666_35667_35668_35669_35670_35671_35672_35673_35674_35675_35676_35677_35678_35679_35680_35681_35682_35683_35684_35685_35686_35687_35688_35689_35690_35691_35692_35693_35694_35695_35696_35697_35698_35699_35700_35701_35702_35703_35704_35705_35706_35707_35708_35709_35710_35711_35712_35713_35714_35715_35716_35717_35718_35719_35720_35721_35722_35723_35724_35725_35726_35727_35728_35729_35730_35731_35732_35733_35734_35735_35736_35737_35738_35739_35740_35741_35742_35743_35744_35745_35746_35747_35748_35749_35750_35751_35752_35753_35754_35755_35756_35757_35758_35759_35760_35761_35762_35763_35764_35765_35766_35767_35768_35769_35770_35771_35772_35773_35774_35775_35776_35777_35778_35779_35780_35781_35782_35783_35784_35785_35786_35787_35788_35789_35790_35791_35792_35793_35794_35795_35796_35797_35798_35799_35800_35801_35802_35803_35804_35805_35806_35807_35808_35809_35810_35811_35812_35813_35814_35815_35816_35817_35818_35819_35820_35821_35822_35823_35824_35825_35826_35827_35828_35829_35830_35831_35832_35833_35834_35835_35836_35837_35838_35839_35840_35841_35842_35843_35844_35845_35846_35847_35848_35849_35850_35851_35852_35853_35854_35855_35856_35857_35858_35859_35860_35861_35862_35863_35864_35865_35866_35867_35868_35869_35870_35871_35872_35873_35874_35875_35876_35877_35878_35879_35880_35881_35882_35883_35884_35885_35886_35887_35888_35889_35890_35891_35892_35893_35894_35895_35896_35897_35898_35899_35900_35901_35902_35903_35904_35905_35906_35907_35908_35909_35910_35911_35912_35913_35914_35915_35916_35917_35918_35919_35920_35921_35922_35923_35924_35925_35926_35927_35928_35929_35930_35931_35932_35933_35934_35935_35936_35937_35938_35939_35940_35941_35942_35943_35944_35945_35946_35947_35948_35949_35950_35951_35952_35953_35954_35955_35956_35957_35958_35959_35960_35961_35962_35963_35964_35965_35966_35967_35968_35969_35970_35971_35972_35973_35974_35975_35976_35977_35978_35979_35980_35981_35982_35983_35984_35985_35986_35987_35988_35989_35990_35991_35992_35993_35994_35995_35996_35997_35998_35999_36000_36001_36002_36003_36004_36005_36006_36007_36008_36009_36010_36011_36012_36013_36014_36015_36016_36017_36018_36019_36020_36021_36022_36023_36024_36025_36026_36027_36028_36029_36030_36031_36032_36033_36034_36035_36036_36037_36038_36039_36040_36041_36042_36043_36044_36045_36046_36047_36048_36049_36050_36051_36052_36053_36054_36055_36056_36057_36058_36059_36060_36061_36062_36063_36064_36065_36066_36067_36068_36069_36070_36071_36072_36073_36074_36075_36076_36077_36078_36079_36080_36081_36082_36083_36084_36085_36086_36087_36088_36089_36090_36091_36092_36093_36094_36095_36096_36097_36098_36099_36100_36101_36102_36103_36104_36105_36106_36107_36108_36109_36110_36111_36112_36113_36114_36115_36116_36117_36118_36119_36120_36121_36122_36123_36124_36125_36126_36127_36128_36129_36130_36131_36132_36133_36134_36135_36136_36137_36138_36139_36140_36141_36142_36143_36144_36145_36146_36147_36148_36149_36150_36151_36152_36153_36154_36155_36156_36157_36158_36159_36160_36161_36162_36163_36164_36165_36166_36167_36168_36169_36170_36171_36172_36173_36174_36175_36176_36177_36178_36179_36180_36181_36182_36183_36184_36185_36186_36187_36188_36189_36190_36191_36192_36193_36194_36195_36196_36197_36198_36199_36200_36201_36202_36203_36204_36205_36206_36207_36208_36209_36210_36211_36212_36213_36214_36215_36216_36217_36218_36219_36220_36221_36222_36223_36224_36225_36226_36227_36228_36229_36230_36231_36232_36233_36234_36235_36236_36237_36238_36239_36240_36241_36242_36243_36244_36245_36246_36247_36248_36249_36250_36251_36252_36253_36254_36255_36256_36257_36258_36259_36260_36261_36262_36263_36264_36265_36266_36267_36268_36269_36270_36271_36272_36273_36274_36275_36276_36277_36278_36279_36280_36281_36282_36283_36284_36285_36286_36287_36288_36289_36290_36291_36292_36293_36294_36295_36296_36297_36298_36299_36300_36301_36302_36303_36304_36305_36306_36307_36308_36309_36310_36311_36312_36313_36314_36315_36316_36317_36318_36319_36320_36321_36322_36323_36324_36325_36326_36327_36328_36329_36330_36331_36332_36333_36334_36335_36336_36337_36338_36339_36340_36341_36342_36343_36344_36345_36346_36347_36348_36349_36350_36351_36352_36353_36354_36355_36356_36357_36358_36359_36360_36361_36362_36363_36364_36365_36366_36367_36368_36369_36370_36371_36372_36373_36374_36375_36376_36377_36378_36379_36380_36381_36382_36383_36384_36385_36386_36387_36388_36389_36390_36391_36392_36393_36394_36395_36396_36397_36398_36399_36400_36401_36402_36403_36404_36405_36406_36407_36408_36409_36410_36411_36412_36413_36414_36415_36416_36417_36418_36419_36420_36421_36422_36423_36424_36425_36426_36427_36428_36429_36430_36431_36432_36433_36434_36435_36436_36437_36438_36439_36440_36441_36442_36443_36444_36445_36446_36447_36448_36449_36450_36451_36452_36453_36454_36455_36456_36457_36458_36459_36460_36461_36462_36463_36464_36465_36466_36467_36468_36469_36470_36471_36472_36473_36474_36475_36476_36477_36478_36479_36480_36481_36482_36483_36484_36485_36486_36487_36488_36489_36490_36491_36492_36493_36494_36495_36496_36497_36498_36499_36500_36501_36502_36503_36504_36505_36506_36507_36508_36509_36510_36511_36512_36513_36514_36515_36516_36517_36518_36519_36520_36521_36522_36523_36524_36525_36526_36527_36528_36529_36530_36531_36532_36533_36534_36535_36536_36537_36538_36539_36540_36541_36542_36543_36544_36545_36546_36547_36548_36549_36550_36551_36552_36553_36554_36555_36556_36557_36558_36559_36560_36561_36562_36563_36564_36565_36566_36567_36568_36569_36570_36571_36572_36573_36574_36575_36576_36577_36578_36579_36580_36581_36582_36583_36584_36585_36586_36587_36588_36589_36590_36591_36592_36593_36594_36595_36596_36597_36598_36599_36600_36601_36602_36603_36604_36605_36606_36607_36608_36609_36610_36611_36612_36613_36614_36615_36616_36617_36618_36619_36620_36621_36622_36623_36624_36625_36626_36627_36628_36629_36630_36631_36632_36633_36634_36635_36636_36637_36638_36639_36640_36641_36642_36643_36644_36645_36646_36647_36648_36649_36650_36651_36652_36653_36654_36655_36656_36657_36658_36659_36660_36661_36662_36663_36664_36665_36666_36667_36668_36669_36670_36671_36672_36673_36674_36675_36676_36677_36678_36679_36680_36681_36682_36683_36684_36685_36686_36687_36688_36689_36690_36691_36692_36693_36694_36695_36696_36697_36698_36699_36700_36701_36702_36703_36704_36705_36706_36707_36708_36709_36710_36711_36712_36713_36714_36715_36716_36717_36718_36719_36720_36721_36722_36723_36724_36725_36726_36727_36728_36729_36730_36731_36732_36733_36734_36735_36736_36737_36738_36739_36740_36741_36742_36743_36744_36745_36746_36747_36748_36749_36750_36751_36752_36753_36754_36755_36756_36757_36758_36759_36760_36761_36762_36763_36764_36765_36766_36767_36768_36769_36770_36771_36772_36773_36774_36775_36776_36777_36778_36779_36780_36781_36782_36783_36784_36785_36786_36787_36788_36789_36790_36791_36792_36793_36794_36795_36796_36797_36798_36799_36800_36801_36802_36803_36804_36805_36806_36807_36808_36809_36810_36811_36812_36813_36814_36815_36816_36817_36818_36819_36820_36821_36822_36823_36824_36825_36826_36827_36828_36829_36830_36831_36832_36833_36834_36835_36836_36837_36838_36839_36840_36841_36842_36843_36844_36845_36846_36847_36848_36849_36850_36851_36852_36853_36854_36855_36856_36857_36858_36859_36860_36861_36862_36863_36864_36865_36866_36867_36868_36869_36870_36871_36872_36873_36874_36875_36876_36877_36878_36879_36880_36881_36882_36883_36884_36885_36886_36887_36888_36889_36890_36891_36892_36893_36894_36895_36896_36897_36898_36899_36900_36901_36902_36903_36904_36905_36906_36907_36908_36909_36910_36911_36912_36913_36914_36915_36916_36917_36918_36919_36920_36921_36922_36923_36924_36925_36926_36927_36928_36929_36930_36931_36932_36933_36934_36935_36936_36937_36938_36939_36940_36941_36942_36943_36944_36945_36946_36947_36948_36949_36950_36951_36952_36953_36954_36955_36956_36957_36958_36959_36960_36961_36962_36963_36964_36965_36966_36967_36968_36969_36970_36971_36972_36973_36974_36975_36976_36977_36978_36979_36980_36981_36982_36983_36984_36985_36986_36987_36988_36989_36990_36991_36992_36993_36994_36995_36996_36997_36998_36999_37000_37001_37002_37003_37004_37005_37006_37007_37008_37009_37010_37011_37012_37013_37014_37015_37016_37017_37018_37019_37020_37021_37022_37023_37024_37025_37026_37027_37028_37029_37030_37031_37032_37033_37034_37035_37036_37037_37038_37039_37040_37041_37042_37043_37044_37045_37046_37047_37048_37049_37050_37051_37052_37053_37054_37055_37056_37057_37058_37059_37060_37061_37062_37063_37064_37065_37066_37067_37068_37069_37070_37071_37072_37073_37074_37075_37076_37077_37078_37079_37080_37081_37082_37083_37084_37085_37086_37087_37088_37089_37090_37091_37092_37093_37094_37095_37096_37097_37098_37099_37100_37101_37102_37103_37104_37105_37106_37107_37108_37109_37110_37111_37112_37113_37114_37115_37116_37117_37118_37119_37120_37121_37122_37123_37124_37125_37126_37127_37128_37129_37130_37131_37132_37133_37134_37135_37136_37137_37138_37139_37140_37141_37142_37143_37144_37145_37146_37147_37148_37149_37150_37151_37152_37153_37154_37155_37156_37157_37158_37159_37160_37161_37162_37163_37164_37165_37166_37167_37168_37169_37170_37171_37172_37173_37174_37175_37176_37177_37178_37179_37180_37181_37182_37183_37184_37185_37186_37187_37188_37189_37190_37191_37192_37193_37194_37195_37196_37197_37198_37199_37200_37201_37202_37203_37204_37205_37206_37207_37208_37209_37210_37211_37212_37213_37214_37215_37216_37217_37218_37219_37220_37221_37222_37223_37224_37225_37226_37227_37228_37229_37230_37231_37232_37233_37234_37235_37236_37237_37238_37239_37240_37241_37242_37243_37244_37245_37246_37247_37248_37249_37250_37251_37252_37253_37254_37255_37256_37257_37258_37259_37260_37261_37262_37263_37264_37265_37266_37267_37268_37269_37270_37271_37272_37273_37274_37275_37276_37277_37278_37279_37280_37281_37282_37283_37284_37285_37286_37287_37288_37289_37290_37291_37292_37293_37294_37295_37296_37297_37298_37299_37300_37301_37302_37303_37304_37305_37306_37307_37308_37309_37310_37311_37312_37313_37314_37315_37316_37317_37318_37319_37320_37321_37322_37323_37324_37325_37326_37327_37328_37329_37330_37331_37332_37333_37334_37335_37336_37337_37338_37339_37340_37341_37342_37343_37344_37345_37346_37347_37348_37349_37350_37351_37352_37353_37354_37355_37356_37357_37358_37359_37360_37361_37362_37363_37364_37365_37366_37367_37368_37369_37370_37371_37372_37373_37374_37375_37376_37377_37378_37379_37380_37381_37382_37383_37384_37385_37386_37387_37388_37389_37390_37391_37392_37393_37394_37395_37396_37397_37398_37399_37400_37401_37402_37403_37404_37405_37406_37407_37408_37409_37410_37411_37412_37413_37414_37415_37416_37417_37418_37419_37420_37421_37422_37423_37424_37425_37426_37427_37428_37429_37430_37431_37432_37433_37434_37435_37436_37437_37438_37439_37440_37441_37442_37443_37444_37445_37446_37447_37448_37449_37450_37451_37452_37453_37454_37455_37456_37457_37458_37459_37460_37461_37462_37463_37464_37465_37466_37467_37468_37469_37470_37471_37472_37473_37474_37475_37476_37477_37478_37479_37480_37481_37482_37483_37484_37485_37486_37487_37488_37489_37490_37491_37492_37493_37494_37495_37496_37497_37498_37499_37500_37501_37502_37503_37504_37505_37506_37507_37508_37509_37510_37511_37512_37513_37514_37515_37516_37517_37518_37519_37520_37521_37522_37523_37524_37525_37526_37527_37528_37529_37530_37531_37532_37533_37534_37535_37536_37537_37538_37539_37540_37541_37542_37543_37544_37545_37546_37547_37548_37549_37550_37551_37552_37553_37554_37555_37556_37557_37558_37559_37560_37561_37562_37563_37564_37565_37566_37567_37568_37569_37570_37571_37572_37573_37574_37575_37576_37577_37578_37579_37580_37581_37582_37583_37584_37585_37586_37587_37588_37589_37590_37591_37592_37593_37594_37595_37596_37597_37598_37599_37600_37601_37602_37603_37604_37605_37606_37607_37608_37609_37610_37611_37612_37613_37614_37615_37616_37617_37618_37619_37620_37621_37622_37623_37624_37625_37626_37627_37628_37629_37630_37631_37632_37633_37634_37635_37636_37637_37638_37639_37640_37641_37642_37643_37644_37645_37646_37647_37648_37649_37650_37651_37652_37653_37654_37655_37656_37657_37658_37659_37660_37661_37662_37663_37664_37665_37666_37667_37668_37669_37670_37671_37672_37673_37674_37675_37676_37677_37678_37679_37680_37681_37682_37683_37684_37685_37686_37687_37688_37689_37690_37691_37692_37693_37694_37695_37696_37697_37698_37699_37700_37701_37702_37703_37704_37705_37706_37707_37708_37709_37710_37711_37712_37713_37714_37715_37716_37717_37718_37719_37720_37721_37722_37723_37724_37725_37726_37727_37728_37729_37730_37731_37732_37733_37734_37735_37736_37737_37738_37739_37740_37741_37742_37743_37744_37745_37746_37747_37748_37749_37750_37751_37752_37753_37754_37755_37756_37757_37758_37759_37760_37761_37762_37763_37764_37765_37766_37767_37768_37769_37770_37771_37772_37773_37774_37775_37776_37777_37778_37779_37780_37781_37782_37783_37784_37785_37786_37787_37788_37789_37790_37791_37792_37793_37794_37795_37796_37797_37798_37799_37800_37801_37802_37803_37804_37805_37806_37807_37808_37809_37810_37811_37812_37813_37814_37815_37816_37817_37818_37819_37820_37821_37822_37823_37824_37825_37826_37827_37828_37829_37830_37831_37832_37833_37834_37835_37836_37837_37838_37839_37840_37841_37842_37843_37844_37845_37846_37847_37848_37849_37850_37851_37852_37853_37854_37855_37856_37857_37858_37859_37860_37861_37862_37863_37864_37865_37866_37867_37868_37869_37870_37871_37872_37873_37874_37875_37876_37877_37878_37879_37880_37881_37882_37883_37884_37885_37886_37887_37888_37889_37890_37891_37892_37893_37894_37895_37896_37897_37898_37899_37900_37901_37902_37903_37904_37905_37906_37907_37908_37909_37910_37911_37912_37913_37914_37915_37916_37917_37918_37919_37920_37921_37922_37923_37924_37925_37926_37927_37928_37929_37930_37931_37932_37933_37934_37935_37936_37937_37938_37939_37940_37941_37942_37943_37944_37945_37946_37947_37948_37949_37950_37951_37952_37953_37954_37955_37956_37957_37958_37959_37960_37961_37962_37963_37964_37965_37966_37967_37968_37969_37970_37971_37972_37973_37974_37975_37976_37977_37978_37979_37980_37981_37982_37983_37984_37985_37986_37987_37988_37989_37990_37991_37992_37993_37994_37995_37996_37997_37998_37999_38000_38001_38002_38003_38004_38005_38006_38007_38008_38009_38010_38011_38012_38013_38014_38015_38016_38017_38018_38019_38020_38021_38022_38023_38024_38025_38026_38027_38028_38029_38030_38031_38032_38033_38034_38035_38036_38037_38038_38039_38040_38041_38042_38043_38044_38045_38046_38047_38048_38049_38050_38051_38052_38053_38054_38055_38056_38057_38058_38059_38060_38061_38062_38063_38064_38065_38066_38067_38068_38069_38070_38071_38072_38073_38074_38075_38076_38077_38078_38079_38080_38081_38082_38083_38084_38085_38086_38087_38088_38089_38090_38091_38092_38093_38094_38095_38096_38097_38098_38099_38100_38101_38102_38103_38104_38105_38106_38107_38108_38109_38110_38111_38112_38113_38114_38115_38116_38117_38118_38119_38120_38121_38122_38123_38124_38125_38126_38127_38128_38129_38130_38131_38132_38133_38134_38135_38136_38137_38138_38139_38140_38141_38142_38143_38144_38145_38146_38147_38148_38149_38150_38151_38152_38153_38154_38155_38156_38157_38158_38159_38160_38161_38162_38163_38164_38165_38166_38167_38168_38169_38170_38171_38172_38173_38174_38175_38176_38177_38178_38179_38180_38181_38182_38183_38184_38185_38186_38187_38188_38189_38190_38191_38192_38193_38194_38195_38196_38197_38198_38199_38200_38201_38202_38203_38204_38205_38206_38207_38208_38209_38210_38211_38212_38213_38214_38215_38216_38217_38218_38219_38220_38221_38222_38223_38224_38225_38226_38227_38228_38229_38230_38231_38232_38233_38234_38235_38236_38237_38238_38239_38240_38241_38242_38243_38244_38245_38246_38247_38248_38249_38250_38251_38252_38253_38254_38255_38256_38257_38258_38259_38260_38261_38262_38263_38264_38265_38266_38267_38268_38269_38270_38271_38272_38273_38274_38275_38276_38277_38278_38279_38280_38281_38282_38283_38284_38285_38286_38287_38288_38289_38290_38291_38292_38293_38294_38295_38296_38297_38298_38299_38300_38301_38302_38303_38304_38305_38306_38307_38308_38309_38310_38311_38312_38313_38314_38315_38316_38317_38318_38319_38320_38321_38322_38323_38324_38325_38326_38327_38328_38329_38330_38331_38332_38333_38334_38335_38336_38337_38338_38339_38340_38341_38342_38343_38344_38345_38346_38347_38348_38349_38350_38351_38352_38353_38354_38355_38356_38357_38358_38359_38360_38361_38362_38363_38364_38365_38366_38367_38368_38369_38370_38371_38372_38373_38374_38375_38376_38377_38378_38379_38380_38381_38382_38383_38384_38385_38386_38387_38388_38389_38390_38391_38392_38393_38394_38395_38396_38397_38398_38399_38400_38401_38402_38403_38404_38405_38406_38407_38408_38409_38410_38411_38412_38413_38414_38415_38416_38417_38418_38419_38420_38421_38422_38423_38424_38425_38426_38427_38428_38429_38430_38431_38432_38433_38434_38435_38436_38437_38438_38439_38440_38441_38442_38443_38444_38445_38446_38447_38448_38449_38450_38451_38452_38453_38454_38455_38456_38457_38458_38459_38460_38461_38462_38463_38464_38465_38466_38467_38468_38469_38470_38471_38472_38473_38474_38475_38476_38477_38478_38479_38480_38481_38482_38483_38484_38485_38486_38487_38488_38489_38490_38491_38492_38493_38494_38495_38496_38497_38498_38499_38500_38501_38502_38503_38504_38505_38506_38507_38508_38509_38510_38511_38512_38513_38514_38515_38516_38517_38518_38519_38520_38521_38522_38523_38524_38525_38526_38527_38528_38529_38530_38531_38532_38533_38534_38535_38536_38537_38538_38539_38540_38541_38542_38543_38544_38545_38546_38547_38548_38549_38550_38551_38552_38553_38554_38555_38556_38557_38558_38559_38560_38561_38562_38563_38564_38565_38566_38567_38568_38569_38570_38571_38572_38573_38574_38575_38576_38577_38578_38579_38580_38581_38582_38583_38584_38585_38586_38587_38588_38589_38590_38591_38592_38593_38594_38595_38596_38597_38598_38599_38600_38601_38602_38603_38604_38605_38606_38607_38608_38609_38610_38611_38612_38613_38614_38615_38616_38617_38618_38619_38620_38621_38622_38623_38624_38625_38626_38627_38628_38629_38630_38631_38632_38633_38634_38635_38636_38637_38638_38639_38640_38641_38642_38643_38644_38645_38646_38647_38648_38649_38650_38651_38652_38653_38654_38655_38656_38657_38658_38659_38660_38661_38662_38663_38664_38665_38666_38667_38668_38669_38670_38671_38672_38673_38674_38675_38676_38677_38678_38679_38680_38681_38682_38683_38684_38685_38686_38687_38688_38689_38690_38691_38692_38693_38694_38695_38696_38697_38698_38699_38700_38701_38702_38703_38704_38705_38706_38707_38708_38709_38710_38711_38712_38713_38714_38715_38716_38717_38718_38719_38720_38721_38722_38723_38724_38725_38726_38727_38728_38729_38730_38731_38732_38733_38734_38735_38736_38737_38738_38739_38740_38741_38742_38743_38744_38745_38746_38747_38748_38749_38750_38751_38752_38753_38754_38755_38756_38757_38758_38759_38760_38761_38762_38763_38764_38765_38766_38767_38768_38769_38770_38771_38772_38773_38774_38775_38776_38777_38778_38779_38780_38781_38782_38783_38784_38785_38786_38787_38788_38789_38790_38791_38792_38793_38794_38795_38796_38797_38798_38799_38800_38801_38802_38803_38804_38805_38806_38807_38808_38809_38810_38811_38812_38813_38814_38815_38816_38817_38818_38819_38820_38821_38822_38823_38824_38825_38826_38827_38828_38829_38830_38831_38832_38833_38834_38835_38836_38837_38838_38839_38840_38841_38842_38843_38844_38845_38846_38847_38848_38849_38850_38851_38852_38853_38854_38855_38856_38857_38858_38859_38860_38861_38862_38863_38864_38865_38866_38867_38868_38869_38870_38871_38872_38873_38874_38875_38876_38877_38878_38879_38880_38881_38882_38883_38884_38885_38886_38887_38888_38889_38890_38891_38892_38893_38894_38895_38896_38897_38898_38899_38900_38901_38902_38903_38904_38905_38906_38907_38908_38909_38910_38911_38912_38913_38914_38915_38916_38917_38918_38919_38920_38921_38922_38923_38924_38925_38926_38927_38928_38929_38930_38931_38932_38933_38934_38935_38936_38937_38938_38939_38940_38941_38942_38943_38944_38945_38946_38947_38948_38949_38950_38951_38952_38953_38954_38955_38956_38957_38958_38959_38960_38961_38962_38963_38964_38965_38966_38967_38968_38969_38970_38971_38972_38973_38974_38975_38976_38977_38978_38979_38980_38981_38982_38983_38984_38985_38986_38987_38988_38989_38990_38991_38992_38993_38994_38995_38996_38997_38998_38999_39000_39001_39002_39003_39004_39005_39006_39007_39008_39009_39010_39011_39012_39013_39014_39015_39016_39017_39018_39019_39020_39021_39022_39023_39024_39025_39026_39027_39028_39029_39030_39031_39032_39033_39034_39035_39036_39037_39038_39039_39040_39041_39042_39043_39044_39045_39046_39047_39048_39049_39050_39051_39052_39053_39054_39055_39056_39057_39058_39059_39060_39061_39062_39063_39064_39065_39066_39067_39068_39069_39070_39071_39072_39073_39074_39075_39076_39077_39078_39079_39080_39081_39082_39083_39084_39085_39086_39087_39088_39089_39090_39091_39092_39093_39094_39095_39096_39097_39098_39099_39100_39101_39102_39103_39104_39105_39106_39107_39108_39109_39110_39111_39112_39113_39114_39115_39116_39117_39118_39119_39120_39121_39122_39123_39124_39125_39126_39127_39128_39129_39130_39131_39132_39133_39134_39135_39136_39137_39138_39139_39140_39141_39142_39143_39144_39145_39146_39147_39148_39149_39150_39151_39152_39153_39154_39155_39156_39157_39158_39159_39160_39161_39162_39163_39164_39165_39166_39167_39168_39169_39170_39171_39172_39173_39174_39175_39176_39177_39178_39179_39180_39181_39182_39183_39184_39185_39186_39187_39188_39189_39190_39191_39192_39193_39194_39195_39196_39197_39198_39199_39200_39201_39202_39203_39204_39205_39206_39207_39208_39209_39210_39211_39212_39213_39214_39215_39216_39217_39218_39219_39220_39221_39222_39223_39224_39225_39226_39227_39228_39229_39230_39231_39232_39233_39234_39235_39236_39237_39238_39239_39240_39241_39242_39243_39244_39245_39246_39247_39248_39249_39250_39251_39252_39253_39254_39255_39256_39257_39258_39259_39260_39261_39262_39263_39264_39265_39266_39267_39268_39269_39270_39271_39272_39273_39274_39275_39276_39277_39278_39279_39280_39281_39282_39283_39284_39285_39286_39287_39288_39289_39290_39291_39292_39293_39294_39295_39296_39297_39298_39299_39300_39301_39302_39303_39304_39305_39306_39307_39308_39309_39310_39311_39312_39313_39314_39315_39316_39317_39318_39319_39320_39321_39322_39323_39324_39325_39326_39327_39328_39329_39330_39331_39332_39333_39334_39335_39336_39337_39338_39339_39340_39341_39342_39343_39344_39345_39346_39347_39348_39349_39350_39351_39352_39353_39354_39355_39356_39357_39358_39359_39360_39361_39362_39363_39364_39365_39366_39367_39368_39369_39370_39371_39372_39373_39374_39375_39376_39377_39378_39379_39380_39381_39382_39383_39384_39385_39386_39387_39388_39389_39390_39391_39392_39393_39394_39395_39396_39397_39398_39399_39400_39401_39402_39403_39404_39405_39406_39407_39408_39409_39410_39411_39412_39413_39414_39415_39416_39417_39418_39419_39420_39421_39422_39423_39424_39425_39426_39427_39428_39429_39430_39431_39432_39433_39434_39435_39436_39437_39438_39439_39440_39441_39442_39443_39444_39445_39446_39447_39448_39449_39450_39451_39452_39453_39454_39455_39456_39457_39458_39459_39460_39461_39462_39463_39464_39465_39466_39467_39468_39469_39470_39471_39472_39473_39474_39475_39476_39477_39478_39479_39480_39481_39482_39483_39484_39485_39486_39487_39488_39489_39490_39491_39492_39493_39494_39495_39496_39497_39498_39499_39500_39501_39502_39503_39504_39505_39506_39507_39508_39509_39510_39511_39512_39513_39514_39515_39516_39517_39518_39519_39520_39521_39522_39523_39524_39525_39526_39527_39528_39529_39530_39531_39532_39533_39534_39535_39536_39537_39538_39539_39540_39541_39542_39543_39544_39545_39546_39547_39548_39549_39550_39551_39552_39553_39554_39555_39556_39557_39558_39559_39560_39561_39562_39563_39564_39565_39566_39567_39568_39569_39570_39571_39572_39573_39574_39575_39576_39577_39578_39579_39580_39581_39582_39583_39584_39585_39586_39587_39588_39589_39590_39591_39592_39593_39594_39595_39596_39597_39598_39599_39600_39601_39602_39603_39604_39605_39606_39607_39608_39609_39610_39611_39612_39613_39614_39615_39616_39617_39618_39619_39620_39621_39622_39623_39624_39625_39626_39627_39628_39629_39630_39631_39632_39633_39634_39635_39636_39637_39638_39639_39640_39641_39642_39643_39644_39645_39646_39647_39648_39649_39650_39651_39652_39653_39654_39655_39656_39657_39658_39659_39660_39661_39662_39663_39664_39665_39666_39667_39668_39669_39670_39671_39672_39673_39674_39675_39676_39677_39678_39679_39680_39681_39682_39683_39684_39685_39686_39687_39688_39689_39690_39691_39692_39693_39694_39695_39696_39697_39698_39699_39700_39701_39702_39703_39704_39705_39706_39707_39708_39709_39710_39711_39712_39713_39714_39715_39716_39717_39718_39719_39720_39721_39722_39723_39724_39725_39726_39727_39728_39729_39730_39731_39732_39733_39734_39735_39736_39737_39738_39739_39740_39741_39742_39743_39744_39745_39746_39747_39748_39749_39750_39751_39752_39753_39754_39755_39756_39757_39758_39759_39760_39761_39762_39763_39764_39765_39766_39767_39768_39769_39770_39771_39772_39773_39774_39775_39776_39777_39778_39779_39780_39781_39782_39783_39784_39785_39786_39787_39788_39789_39790_39791_39792_39793_39794_39795_39796_39797_39798_39799_39800_39801_39802_39803_39804_39805_39806_39807_39808_39809_39810_39811_39812_39813_39814_39815_39816_39817_39818_39819_39820_39821_39822_39823_39824_39825_39826_39827_39828_39829_39830_39831_39832_39833_39834_39835_39836_39837_39838_39839_39840_39841_39842_39843_39844_39845_39846_39847_39848_39849_39850_39851_39852_39853_39854_39855_39856_39857_39858_39859_39860_39861_39862_39863_39864_39865_39866_39867_39868_39869_39870_39871_39872_39873_39874_39875_39876_39877_39878_39879_39880_39881_39882_39883_39884_39885_39886_39887_39888_39889_39890_39891_39892_39893_39894_39895_39896_39897_39898_39899_39900_39901_39902_39903_39904_39905_39906_39907_39908_39909_39910_39911_39912_39913_39914_39915_39916_39917_39918_39919_39920_39921_39922_39923_39924_39925_39926_39927_39928_39929_39930_39931_39932_39933_39934_39935_39936_39937_39938_39939_39940_39941_39942_39943_39944_39945_39946_39947_39948_39949_39950_39951_39952_39953_39954_39955_39956_39957_39958_39959_39960_39961_39962_39963_39964_39965_39966_39967_39968_39969_39970_39971_39972_39973_39974_39975_39976_39977_39978_39979_39980_39981_39982_39983_39984_39985_39986_39987_39988_39989_39990_39991_39992_39993_39994_39995_39996_39997_39998_39999_40000_40001_40002_40003_40004_40005_40006_40007_40008_40009_40010_40011_40012_40013_40014_40015_40016_40017_40018_40019_40020_40021_40022_40023_40024_40025_40026_40027_40028_40029_40030_40031_40032_40033_40034_40035_40036_40037_40038_40039_40040_40041_40042_40043_40044_40045_40046_40047_40048_40049_40050_40051_40052_40053_40054_40055_40056_40057_40058_40059_40060_40061_40062_40063_40064_40065_40066_40067_40068_40069_40070_40071_40072_40073_40074_40075_40076_40077_40078_40079_40080_40081_40082_40083_40084_40085_40086_40087_40088_40089_40090_40091_40092_40093_40094_40095_40096_40097_40098_40099_40100_40101_40102_40103_40104_40105_40106_40107_40108_40109_40110_40111_40112_40113_40114_40115_40116_40117_40118_40119_40120_40121_40122_40123_40124_40125_40126_40127_40128_40129_40130_40131_40132_40133_40134_40135_40136_40137_40138_40139_40140_40141_40142_40143_40144_40145_40146_40147_40148_40149_40150_40151_40152_40153_40154_40155_40156_40157_40158_40159_40160_40161_40162_40163_40164_40165_40166_40167_40168_40169_40170_40171_40172_40173_40174_40175_40176_40177_40178_40179_40180_40181_40182_40183_40184_40185_40186_40187_40188_40189_40190_40191_40192_40193_40194_40195_40196_40197_40198_40199_40200_40201_40202_40203_40204_40205_40206_40207_40208_40209_40210_40211_40212_40213_40214_40215_40216_40217_40218_40219_40220_40221_40222_40223_40224_40225_40226_40227_40228_40229_40230_40231_40232_40233_40234_40235_40236_40237_40238_40239_40240_40241_40242_40243_40244_40245_40246_40247_40248_40249_40250_40251_40252_40253_40254_40255_40256_40257_40258_40259_40260_40261_40262_40263_40264_40265_40266_40267_40268_40269_40270_40271_40272_40273_40274_40275_40276_40277_40278_40279_40280_40281_40282_40283_40284_40285_40286_40287_40288_40289_40290_40291_40292_40293_40294_40295_40296_40297_40298_40299_40300_40301_40302_40303_40304_40305_40306_40307_40308_40309_40310_40311_40312_40313_40314_40315_40316_40317_40318_40319_40320_40321_40322_40323_40324_40325_40326_40327_40328_40329_40330_40331_40332_40333_40334_40335_40336_40337_40338_40339_40340_40341_40342_40343_40344_40345_40346_40347_40348_40349_40350_40351_40352_40353_40354_40355_40356_40357_40358_40359_40360_40361_40362_40363_40364_40365_40366_40367_40368_40369_40370_40371_40372_40373_40374_40375_40376_40377_40378_40379_40380_40381_40382_40383_40384_40385_40386_40387_40388_40389_40390_40391_40392_40393_40394_40395_40396_40397_40398_40399_40400_40401_40402_40403_40404_40405_40406_40407_40408_40409_40410_40411_40412_40413_40414_40415_40416_40417_40418_40419_40420_40421_40422_40423_40424_40425_40426_40427_40428_40429_40430_40431_40432_40433_40434_40435_40436_40437_40438_40439_40440_40441_40442_40443_40444_40445_40446_40447_40448_40449_40450_40451_40452_40453_40454_40455_40456_40457_40458_40459_40460_40461_40462_40463_40464_40465_40466_40467_40468_40469_40470_40471_40472_40473_40474_40475_40476_40477_40478_40479_40480_40481_40482_40483_40484_40485_40486_40487_40488_40489_40490_40491_40492_40493_40494_40495_40496_40497_40498_40499_40500_40501_40502_40503_40504_40505_40506_40507_40508_40509_40510_40511_40512_40513_40514_40515_40516_40517_40518_40519_40520_40521_40522_40523_40524_40525_40526_40527_40528_40529_40530_40531_40532_40533_40534_40535_40536_40537_40538_40539_40540_40541_40542_40543_40544_40545_40546_40547_40548_40549_40550_40551_40552_40553_40554_40555_40556_40557_40558_40559_40560_40561_40562_40563_40564_40565_40566_40567_40568_40569_40570_40571_40572_40573_40574_40575_40576_40577_40578_40579_40580_40581_40582_40583_40584_40585_40586_40587_40588_40589_40590_40591_40592_40593_40594_40595_40596_40597_40598_40599_40600_40601_40602_40603_40604_40605_40606_40607_40608_40609_40610_40611_40612_40613_40614_40615_40616_40617_40618_40619_40620_40621_40622_40623_40624_40625_40626_40627_40628_40629_40630_40631_40632_40633_40634_40635_40636_40637_40638_40639_40640_40641_40642_40643_40644_40645_40646_40647_40648_40649_40650_40651_40652_40653_40654_40655_40656_40657_40658_40659_40660_40661_40662_40663_40664_40665_40666_40667_40668_40669_40670_40671_40672_40673_40674_40675_40676_40677_40678_40679_40680_40681_40682_40683_40684_40685_40686_40687_40688_40689_40690_40691_40692_40693_40694_40695_40696_40697_40698_40699_40700_40701_40702_40703_40704_40705_40706_40707_40708_40709_40710_40711_40712_40713_40714_40715_40716_40717_40718_40719_40720_40721_40722_40723_40724_40725_40726_40727_40728_40729_40730_40731_40732_40733_40734_40735_40736_40737_40738_40739_40740_40741_40742_40743_40744_40745_40746_40747_40748_40749_40750_40751_40752_40753_40754_40755_40756_40757_40758_40759_40760_40761_40762_40763_40764_40765_40766_40767_40768_40769_40770_40771_40772_40773_40774_40775_40776_40777_40778_40779_40780_40781_40782_40783_40784_40785_40786_40787_40788_40789_40790_40791_40792_40793_40794_40795_40796_40797_40798_40799_40800_40801_40802_40803_40804_40805_40806_40807_40808_40809_40810_40811_40812_40813_40814_40815_40816_40817_40818_40819_40820_40821_40822_40823_40824_40825_40826_40827_40828_40829_40830_40831_40832_40833_40834_40835_40836_40837_40838_40839_40840_40841_40842_40843_40844_40845_40846_40847_40848_40849_40850_40851_40852_40853_40854_40855_40856_40857_40858_40859_40860_40861_40862_40863_40864_40865_40866_40867_40868_40869_40870_40871_40872_40873_40874_40875_40876_40877_40878_40879_40880_40881_40882_40883_40884_40885_40886_40887_40888_40889_40890_40891_40892_40893_40894_40895_40896_40897_40898_40899_40900_40901_40902_40903_40904_40905_40906_40907_40908_40909_40910_40911_40912_40913_40914_40915_40916_40917_40918_40919_40920_40921_40922_40923_40924_40925_40926_40927_40928_40929_40930_40931_40932_40933_40934_40935_40936_40937_40938_40939_40940_40941_40942_40943_40944_40945_40946_40947_40948_40949_40950_40951_40952_40953_40954_40955_40956_40957_40958_40959_40960_40961_40962_40963_40964_40965_40966_40967_40968_40969_40970_40971_40972_40973_40974_40975_40976_40977_40978_40979_40980_40981_40982_40983_40984_40985_40986_40987_40988_40989_40990_40991_40992_40993_40994_40995_40996_40997_40998_40999_41000_41001_41002_41003_41004_41005_41006_41007_41008_41009_41010_41011_41012_41013_41014_41015_41016_41017_41018_41019_41020_41021_41022_41023_41024_41025_41026_41027_41028_41029_41030_41031_41032_41033_41034_41035_41036_41037_41038_41039_41040_41041_41042_41043_41044_41045_41046_41047_41048_41049_41050_41051_41052_41053_41054_41055_41056_41057_41058_41059_41060_41061_41062_41063_41064_41065_41066_41067_41068_41069_41070_41071_41072_41073_41074_41075_41076_41077_41078_41079_41080_41081_41082_41083_41084_41085_41086_41087_41088_41089_41090_41091_41092_41093_41094_41095_41096_41097_41098_41099_41100_41101_41102_41103_41104_41105_41106_41107_41108_41109_41110_41111_41112_41113_41114_41115_41116_41117_41118_41119_41120_41121_41122_41123_41124_41125_41126_41127_41128_41129_41130_41131_41132_41133_41134_41135_41136_41137_41138_41139_41140_41141_41142_41143_41144_41145_41146_41147_41148_41149_41150_41151_41152_41153_41154_41155_41156_41157_41158_41159_41160_41161_41162_41163_41164_41165_41166_41167_41168_41169_41170_41171_41172_41173_41174_41175_41176_41177_41178_41179_41180_41181_41182_41183_41184_41185_41186_41187_41188_41189_41190_41191_41192_41193_41194_41195_41196_41197_41198_41199_41200_41201_41202_41203_41204_41205_41206_41207_41208_41209_41210_41211_41212_41213_41214_41215_41216_41217_41218_41219_41220_41221_41222_41223_41224_41225_41226_41227_41228_41229_41230_41231_41232_41233_41234_41235_41236_41237_41238_41239_41240_41241_41242_41243_41244_41245_41246_41247_41248_41249_41250_41251_41252_41253_41254_41255_41256_41257_41258_41259_41260_41261_41262_41263_41264_41265_41266_41267_41268_41269_41270_41271_41272_41273_41274_41275_41276_41277_41278_41279_41280_41281_41282_41283_41284_41285_41286_41287_41288_41289_41290_41291_41292_41293_41294_41295_41296_41297_41298_41299_41300_41301_41302_41303_41304_41305_41306_41307_41308_41309_41310_41311_41312_41313_41314_41315_41316_41317_41318_41319_41320_41321_41322_41323_41324_41325_41326_41327_41328_41329_41330_41331_41332_41333_41334_41335_41336_41337_41338_41339_41340_41341_41342_41343_41344_41345_41346_41347_41348_41349_41350_41351_41352_41353_41354_41355_41356_41357_41358_41359_41360_41361_41362_41363_41364_41365_41366_41367_41368_41369_41370_41371_41372_41373_41374_41375_41376_41377_41378_41379_41380_41381_41382_41383_41384_41385_41386_41387_41388_41389_41390_41391_41392_41393_41394_41395_41396_41397_41398_41399_41400_41401_41402_41403_41404_41405_41406_41407_41408_41409_41410_41411_41412_41413_41414_41415_41416_41417_41418_41419_41420_41421_41422_41423_41424_41425_41426_41427_41428_41429_41430_41431_41432_41433_41434_41435_41436_41437_41438_41439_41440_41441_41442_41443_41444_41445_41446_41447_41448_41449_41450_41451_41452_41453_41454_41455_41456_41457_41458_41459_41460_41461_41462_41463_41464_41465_41466_41467_41468_41469_41470_41471_41472_41473_41474_41475_41476_41477_41478_41479_41480_41481_41482_41483_41484_41485_41486_41487_41488_41489_41490_41491_41492_41493_41494_41495_41496_41497_41498_41499_41500_41501_41502_41503_41504_41505_41506_41507_41508_41509_41510_41511_41512_41513_41514_41515_41516_41517_41518_41519_41520_41521_41522_41523_41524_41525_41526_41527_41528_41529_41530_41531_41532_41533_41534_41535_41536_41537_41538_41539_41540_41541_41542_41543_41544_41545_41546_41547_41548_41549_41550_41551_41552_41553_41554_41555_41556_41557_41558_41559_41560_41561_41562_41563_41564_41565_41566_41567_41568_41569_41570_41571_41572_41573_41574_41575_41576_41577_41578_41579_41580_41581_41582_41583_41584_41585_41586_41587_41588_41589_41590_41591_41592_41593_41594_41595_41596_41597_41598_41599_41600_41601_41602_41603_41604_41605_41606_41607_41608_41609_41610_41611_41612_41613_41614_41615_41616_41617_41618_41619_41620_41621_41622_41623_41624_41625_41626_41627_41628_41629_41630_41631_41632_41633_41634_41635_41636_41637_41638_41639_41640_41641_41642_41643_41644_41645_41646_41647_41648_41649_41650_41651_41652_41653_41654_41655_41656_41657_41658_41659_41660_41661_41662_41663_41664_41665_41666_41667_41668_41669_41670_41671_41672_41673_41674_41675_41676_41677_41678_41679_41680_41681_41682_41683_41684_41685_41686_41687_41688_41689_41690_41691_41692_41693_41694_41695_41696_41697_41698_41699_41700_41701_41702_41703_41704_41705_41706_41707_41708_41709_41710_41711_41712_41713_41714_41715_41716_41717_41718_41719_41720_41721_41722_41723_41724_41725_41726_41727_41728_41729_41730_41731_41732_41733_41734_41735_41736_41737_41738_41739_41740_41741_41742_41743_41744_41745_41746_41747_41748_41749_41750_41751_41752_41753_41754_41755_41756_41757_41758_41759_41760_41761_41762_41763_41764_41765_41766_41767_41768_41769_41770_41771_41772_41773_41774_41775_41776_41777_41778_41779_41780_41781_41782_41783_41784_41785_41786_41787_41788_41789_41790_41791_41792_41793_41794_41795_41796_41797_41798_41799_41800_41801_41802_41803_41804_41805_41806_41807_41808_41809_41810_41811_41812_41813_41814_41815_41816_41817_41818_41819_41820_41821_41822_41823_41824_41825_41826_41827_41828_41829_41830_41831_41832_41833_41834_41835_41836_41837_41838_41839_41840_41841_41842_41843_41844_41845_41846_41847_41848_41849_41850_41851_41852_41853_41854_41855_41856_41857_41858_41859_41860_41861_41862_41863_41864_41865_41866_41867_41868_41869_41870_41871_41872_41873_41874_41875_41876_41877_41878_41879_41880_41881_41882_41883_41884_41885_41886_41887_41888_41889_41890_41891_41892_41893_41894_41895_41896_41897_41898_41899_41900_41901_41902_41903_41904_41905_41906_41907_41908_41909_41910_41911_41912_41913_41914_41915_41916_41917_41918_41919_41920_41921_41922_41923_41924_41925_41926_41927_41928_41929_41930_41931_41932_41933_41934_41935_41936_41937_41938_41939_41940_41941_41942_41943_41944_41945_41946_41947_41948_41949_41950_41951_41952_41953_41954_41955_41956_41957_41958_41959_41960_41961_41962_41963_41964_41965_41966_41967_41968_41969_41970_41971_41972_41973_41974_41975_41976_41977_41978_41979_41980_41981_41982_41983_41984_41985_41986_41987_41988_41989_41990_41991_41992_41993_41994_41995_41996_41997_41998_41999_42000_42001_42002_42003_42004_42005_42006_42007_42008_42009_42010_42011_42012_42013_42014_42015_42016_42017_42018_42019_42020_42021_42022_42023_42024_42025_42026_42027_42028_42029_42030_42031_42032_42033_42034_42035_42036_42037_42038_42039_42040_42041_42042_42043_42044_42045_42046_42047_42048_42049_42050_42051_42052_42053_42054_42055_42056_42057_42058_42059_42060_42061_42062_42063_42064_42065_42066_42067_42068_42069_42070_42071_42072_42073_42074_42075_42076_42077_42078_42079_42080_42081_42082_42083_42084_42085_42086_42087_42088_42089_42090_42091_42092_42093_42094_42095_42096_42097_42098_42099_42100_42101_42102_42103_42104_42105_42106_42107_42108_42109_42110_42111_42112_42113_42114_42115_42116_42117_42118_42119_42120_42121_42122_42123_42124_42125_42126_42127_42128_42129_42130_42131_42132_42133_42134_42135_42136_42137_42138_42139_42140_42141_42142_42143_42144_42145_42146_42147_42148_42149_42150_42151_42152_42153_42154_42155_42156_42157_42158_42159_42160_42161_42162_42163_42164_42165_42166_42167_42168_42169_42170_42171_42172_42173_42174_42175_42176_42177_42178_42179_42180_42181_42182_42183_42184_42185_42186_42187_42188_42189_42190_42191_42192_42193_42194_42195_42196_42197_42198_42199_42200_42201_42202_42203_42204_42205_42206_42207_42208_42209_42210_42211_42212_42213_42214_42215_42216_42217_42218_42219_42220_42221_42222_42223_42224_42225_42226_42227_42228_42229_42230_42231_42232_42233_42234_42235_42236_42237_42238_42239_42240_42241_42242_42243_42244_42245_42246_42247_42248_42249_42250_42251_42252_42253_42254_42255_42256_42257_42258_42259_42260_42261_42262_42263_42264_42265_42266_42267_42268_42269_42270_42271_42272_42273_42274_42275_42276_42277_42278_42279_42280_42281_42282_42283_42284_42285_42286_42287_42288_42289_42290_42291_42292_42293_42294_42295_42296_42297_42298_42299_42300_42301_42302_42303_42304_42305_42306_42307_42308_42309_42310_42311_42312_42313_42314_42315_42316_42317_42318_42319_42320_42321_42322_42323_42324_42325_42326_42327_42328_42329_42330_42331_42332_42333_42334_42335_42336_42337_42338_42339_42340_42341_42342_42343_42344_42345_42346_42347_42348_42349_42350_42351_42352_42353_42354_42355_42356_42357_42358_42359_42360_42361_42362_42363_42364_42365_42366_42367_42368_42369_42370_42371_42372_42373_42374_42375_42376_42377_42378_42379_42380_42381_42382_42383_42384_42385_42386_42387_42388_42389_42390_42391_42392_42393_42394_42395_42396_42397_42398_42399_42400_42401_42402_42403_42404_42405_42406_42407_42408_42409_42410_42411_42412_42413_42414_42415_42416_42417_42418_42419_42420_42421_42422_42423_42424_42425_42426_42427_42428_42429_42430_42431_42432_42433_42434_42435_42436_42437_42438_42439_42440_42441_42442_42443_42444_42445_42446_42447_42448_42449_42450_42451_42452_42453_42454_42455_42456_42457_42458_42459_42460_42461_42462_42463_42464_42465_42466_42467_42468_42469_42470_42471_42472_42473_42474_42475_42476_42477_42478_42479_42480_42481_42482_42483_42484_42485_42486_42487_42488_42489_42490_42491_42492_42493_42494_42495_42496_42497_42498_42499_42500_42501_42502_42503_42504_42505_42506_42507_42508_42509_42510_42511_42512_42513_42514_42515_42516_42517_42518_42519_42520_42521_42522_42523_42524_42525_42526_42527_42528_42529_42530_42531_42532_42533_42534_42535_42536_42537_42538_42539_42540_42541_42542_42543_42544_42545_42546_42547_42548_42549_42550_42551_42552_42553_42554_42555_42556_42557_42558_42559_42560_42561_42562_42563_42564_42565_42566_42567_42568_42569_42570_42571_42572_42573_42574_42575_42576_42577_42578_42579_42580_42581_42582_42583_42584_42585_42586_42587_42588_42589_42590_42591_42592_42593_42594_42595_42596_42597_42598_42599_42600_42601_42602_42603_42604_42605_42606_42607_42608_42609_42610_42611_42612_42613_42614_42615_42616_42617_42618_42619_42620_42621_42622_42623_42624_42625_42626_42627_42628_42629_42630_42631_42632_42633_42634_42635_42636_42637_42638_42639_42640_42641_42642_42643_42644_42645_42646_42647_42648_42649_42650_42651_42652_42653_42654_42655_42656_42657_42658_42659_42660_42661_42662_42663_42664_42665_42666_42667_42668_42669_42670_42671_42672_42673_42674_42675_42676_42677_42678_42679_42680_42681_42682_42683_42684_42685_42686_42687_42688_42689_42690_42691_42692_42693_42694_42695_42696_42697_42698_42699_42700_42701_42702_42703_42704_42705_42706_42707_42708_42709_42710_42711_42712_42713_42714_42715_42716_42717_42718_42719_42720_42721_42722_42723_42724_42725_42726_42727_42728_42729_42730_42731_42732_42733_42734_42735_42736_42737_42738_42739_42740_42741_42742_42743_42744_42745_42746_42747_42748_42749_42750_42751_42752_42753_42754_42755_42756_42757_42758_42759_42760_42761_42762_42763_42764_42765_42766_42767_42768_42769_42770_42771_42772_42773_42774_42775_42776_42777_42778_42779_42780_42781_42782_42783_42784_42785_42786_42787_42788_42789_42790_42791_42792_42793_42794_42795_42796_42797_42798_42799_42800_42801_42802_42803_42804_42805_42806_42807_42808_42809_42810_42811_42812_42813_42814_42815_42816_42817_42818_42819_42820_42821_42822_42823_42824_42825_42826_42827_42828_42829_42830_42831_42832_42833_42834_42835_42836_42837_42838_42839_42840_42841_42842_42843_42844_42845_42846_42847_42848_42849_42850_42851_42852_42853_42854_42855_42856_42857_42858_42859_42860_42861_42862_42863_42864_42865_42866_42867_42868_42869_42870_42871_42872_42873_42874_42875_42876_42877_42878_42879_42880_42881_42882_42883_42884_42885_42886_42887_42888_42889_42890_42891_42892_42893_42894_42895_42896_42897_42898_42899_42900_42901_42902_42903_42904_42905_42906_42907_42908_42909_42910_42911_42912_42913_42914_42915_42916_42917_42918_42919_42920_42921_42922_42923_42924_42925_42926_42927_42928_42929_42930_42931_42932_42933_42934_42935_42936_42937_42938_42939_42940_42941_42942_42943_42944_42945_42946_42947_42948_42949_42950_42951_42952_42953_42954_42955_42956_42957_42958_42959_42960_42961_42962_42963_42964_42965_42966_42967_42968_42969_42970_42971_42972_42973_42974_42975_42976_42977_42978_42979_42980_42981_42982_42983_42984_42985_42986_42987_42988_42989_42990_42991_42992_42993_42994_42995_42996_42997_42998_42999_43000_43001_43002_43003_43004_43005_43006_43007_43008_43009_43010_43011_43012_43013_43014_43015_43016_43017_43018_43019_43020_43021_43022_43023_43024_43025_43026_43027_43028_43029_43030_43031_43032_43033_43034_43035_43036_43037_43038_43039_43040_43041_43042_43043_43044_43045_43046_43047_43048_43049_43050_43051_43052_43053_43054_43055_43056_43057_43058_43059_43060_43061_43062_43063_43064_43065_43066_43067_43068_43069_43070_43071_43072_43073_43074_43075_43076_43077_43078_43079_43080_43081_43082_43083_43084_43085_43086_43087_43088_43089_43090_43091_43092_43093_43094_43095_43096_43097_43098_43099_43100_43101_43102_43103_43104_43105_43106_43107_43108_43109_43110_43111_43112_43113_43114_43115_43116_43117_43118_43119_43120_43121_43122_43123_43124_43125_43126_43127_43128_43129_43130_43131_43132_43133_43134_43135_43136_43137_43138_43139_43140_43141_43142_43143_43144_43145_43146_43147_43148_43149_43150_43151_43152_43153_43154_43155_43156_43157_43158_43159_43160_43161_43162_43163_43164_43165_43166_43167_43168_43169_43170_43171_43172_43173_43174_43175_43176_43177_43178_43179_43180_43181_43182_43183_43184_43185_43186_43187_43188_43189_43190_43191_43192_43193_43194_43195_43196_43197_43198_43199_43200_43201_43202_43203_43204_43205_43206_43207_43208_43209_43210_43211_43212_43213_43214_43215_43216_43217_43218_43219_43220_43221_43222_43223_43224_43225_43226_43227_43228_43229_43230_43231_43232_43233_43234_43235_43236_43237_43238_43239_43240_43241_43242_43243_43244_43245_43246_43247_43248_43249_43250_43251_43252_43253_43254_43255_43256_43257_43258_43259_43260_43261_43262_43263_43264_43265_43266_43267_43268_43269_43270_43271_43272_43273_43274_43275_43276_43277_43278_43279_43280_43281_43282_43283_43284_43285_43286_43287_43288_43289_43290_43291_43292_43293_43294_43295_43296_43297_43298_43299_43300_43301_43302_43303_43304_43305_43306_43307_43308_43309_43310_43311_43312_43313_43314_43315_43316_43317_43318_43319_43320_43321_43322_43323_43324_43325_43326_43327_43328_43329_43330_43331_43332_43333_43334_43335_43336_43337_43338_43339_43340_43341_43342_43343_43344_43345_43346_43347_43348_43349_43350_43351_43352_43353_43354_43355_43356_43357_43358_43359_43360_43361_43362_43363_43364_43365_43366_43367_43368_43369_43370_43371_43372_43373_43374_43375_43376_43377_43378_43379_43380_43381_43382_43383_43384_43385_43386_43387_43388_43389_43390_43391_43392_43393_43394_43395_43396_43397_43398_43399_43400_43401_43402_43403_43404_43405_43406_43407_43408_43409_43410_43411_43412_43413_43414_43415_43416_43417_43418_43419_43420_43421_43422_43423_43424_43425_43426_43427_43428_43429_43430_43431_43432_43433_43434_43435_43436_43437_43438_43439_43440_43441_43442_43443_43444_43445_43446_43447_43448_43449_43450_43451_43452_43453_43454_43455_43456_43457_43458_43459_43460_43461_43462_43463_43464_43465_43466_43467_43468_43469_43470_43471_43472_43473_43474_43475_43476_43477_43478_43479_43480_43481_43482_43483_43484_43485_43486_43487_43488_43489_43490_43491_43492_43493_43494_43495_43496_43497_43498_43499_43500_43501_43502_43503_43504_43505_43506_43507_43508_43509_43510_43511_43512_43513_43514_43515_43516_43517_43518_43519_43520_43521_43522_43523_43524_43525_43526_43527_43528_43529_43530_43531_43532_43533_43534_43535_43536_43537_43538_43539_43540_43541_43542_43543_43544_43545_43546_43547_43548_43549_43550_43551_43552_43553_43554_43555_43556_43557_43558_43559_43560_43561_43562_43563_43564_43565_43566_43567_43568_43569_43570_43571_43572_43573_43574_43575_43576_43577_43578_43579_43580_43581_43582_43583_43584_43585_43586_43587_43588_43589_43590_43591_43592_43593_43594_43595_43596_43597_43598_43599_43600_43601_43602_43603_43604_43605_43606_43607_43608_43609_43610_43611_43612_43613_43614_43615_43616_43617_43618_43619_43620_43621_43622_43623_43624_43625_43626_43627_43628_43629_43630_43631_43632_43633_43634_43635_43636_43637_43638_43639_43640_43641_43642_43643_43644_43645_43646_43647_43648_43649_43650_43651_43652_43653_43654_43655_43656_43657_43658_43659_43660_43661_43662_43663_43664_43665_43666_43667_43668_43669_43670_43671_43672_43673_43674_43675_43676_43677_43678_43679_43680_43681_43682_43683_43684_43685_43686_43687_43688_43689_43690_43691_43692_43693_43694_43695_43696_43697_43698_43699_43700_43701_43702_43703_43704_43705_43706_43707_43708_43709_43710_43711_43712_43713_43714_43715_43716_43717_43718_43719_43720_43721_43722_43723_43724_43725_43726_43727_43728_43729_43730_43731_43732_43733_43734_43735_43736_43737_43738_43739_43740_43741_43742_43743_43744_43745_43746_43747_43748_43749_43750_43751_43752_43753_43754_43755_43756_43757_43758_43759_43760_43761_43762_43763_43764_43765_43766_43767_43768_43769_43770_43771_43772_43773_43774_43775_43776_43777_43778_43779_43780_43781_43782_43783_43784_43785_43786_43787_43788_43789_43790_43791_43792_43793_43794_43795_43796_43797_43798_43799_43800_43801_43802_43803_43804_43805_43806_43807_43808_43809_43810_43811_43812_43813_43814_43815_43816_43817_43818_43819_43820_43821_43822_43823_43824_43825_43826_43827_43828_43829_43830_43831_43832_43833_43834_43835_43836_43837_43838_43839_43840_43841_43842_43843_43844_43845_43846_43847_43848_43849_43850_43851_43852_43853_43854_43855_43856_43857_43858_43859_43860_43861_43862_43863_43864_43865_43866_43867_43868_43869_43870_43871_43872_43873_43874_43875_43876_43877_43878_43879_43880_43881_43882_43883_43884_43885_43886_43887_43888_43889_43890_43891_43892_43893_43894_43895_43896_43897_43898_43899_43900_43901_43902_43903_43904_43905_43906_43907_43908_43909_43910_43911_43912_43913_43914_43915_43916_43917_43918_43919_43920_43921_43922_43923_43924_43925_43926_43927_43928_43929_43930_43931_43932_43933_43934_43935_43936_43937_43938_43939_43940_43941_43942_43943_43944_43945_43946_43947_43948_43949_43950_43951_43952_43953_43954_43955_43956_43957_43958_43959_43960_43961_43962_43963_43964_43965_43966_43967_43968_43969_43970_43971_43972_43973_43974_43975_43976_43977_43978_43979_43980_43981_43982_43983_43984_43985_43986_43987_43988_43989_43990_43991_43992_43993_43994_43995_43996_43997_43998_43999_44000_44001_44002_44003_44004_44005_44006_44007_44008_44009_44010_44011_44012_44013_44014_44015_44016_44017_44018_44019_44020_44021_44022_44023_44024_44025_44026_44027_44028_44029_44030_44031_44032_44033_44034_44035_44036_44037_44038_44039_44040_44041_44042_44043_44044_44045_44046_44047_44048_44049_44050_44051_44052_44053_44054_44055_44056_44057_44058_44059_44060_44061_44062_44063_44064_44065_44066_44067_44068_44069_44070_44071_44072_44073_44074_44075_44076_44077_44078_44079_44080_44081_44082_44083_44084_44085_44086_44087_44088_44089_44090_44091_44092_44093_44094_44095_44096_44097_44098_44099_44100_44101_44102_44103_44104_44105_44106_44107_44108_44109_44110_44111_44112_44113_44114_44115_44116_44117_44118_44119_44120_44121_44122_44123_44124_44125_44126_44127_44128_44129_44130_44131_44132_44133_44134_44135_44136_44137_44138_44139_44140_44141_44142_44143_44144_44145_44146_44147_44148_44149_44150_44151_44152_44153_44154_44155_44156_44157_44158_44159_44160_44161_44162_44163_44164_44165_44166_44167_44168_44169_44170_44171_44172_44173_44174_44175_44176_44177_44178_44179_44180_44181_44182_44183_44184_44185_44186_44187_44188_44189_44190_44191_44192_44193_44194_44195_44196_44197_44198_44199_44200_44201_44202_44203_44204_44205_44206_44207_44208_44209_44210_44211_44212_44213_44214_44215_44216_44217_44218_44219_44220_44221_44222_44223_44224_44225_44226_44227_44228_44229_44230_44231_44232_44233_44234_44235_44236_44237_44238_44239_44240_44241_44242_44243_44244_44245_44246_44247_44248_44249_44250_44251_44252_44253_44254_44255_44256_44257_44258_44259_44260_44261_44262_44263_44264_44265_44266_44267_44268_44269_44270_44271_44272_44273_44274_44275_44276_44277_44278_44279_44280_44281_44282_44283_44284_44285_44286_44287_44288_44289_44290_44291_44292_44293_44294_44295_44296_44297_44298_44299_44300_44301_44302_44303_44304_44305_44306_44307_44308_44309_44310_44311_44312_44313_44314_44315_44316_44317_44318_44319_44320_44321_44322_44323_44324_44325_44326_44327_44328_44329_44330_44331_44332_44333_44334_44335_44336_44337_44338_44339_44340_44341_44342_44343_44344_44345_44346_44347_44348_44349_44350_44351_44352_44353_44354_44355_44356_44357_44358_44359_44360_44361_44362_44363_44364_44365_44366_44367_44368_44369_44370_44371_44372_44373_44374_44375_44376_44377_44378_44379_44380_44381_44382_44383_44384_44385_44386_44387_44388_44389_44390_44391_44392_44393_44394_44395_44396_44397_44398_44399_44400_44401_44402_44403_44404_44405_44406_44407_44408_44409_44410_44411_44412_44413_44414_44415_44416_44417_44418_44419_44420_44421_44422_44423_44424_44425_44426_44427_44428_44429_44430_44431_44432_44433_44434_44435_44436_44437_44438_44439_44440_44441_44442_44443_44444_44445_44446_44447_44448_44449_44450_44451_44452_44453_44454_44455_44456_44457_44458_44459_44460_44461_44462_44463_44464_44465_44466_44467_44468_44469_44470_44471_44472_44473_44474_44475_44476_44477_44478_44479_44480_44481_44482_44483_44484_44485_44486_44487_44488_44489_44490_44491_44492_44493_44494_44495_44496_44497_44498_44499_44500_44501_44502_44503_44504_44505_44506_44507_44508_44509_44510_44511_44512_44513_44514_44515_44516_44517_44518_44519_44520_44521_44522_44523_44524_44525_44526_44527_44528_44529_44530_44531_44532_44533_44534_44535_44536_44537_44538_44539_44540_44541_44542_44543_44544_44545_44546_44547_44548_44549_44550_44551_44552_44553_44554_44555_44556_44557_44558_44559_44560_44561_44562_44563_44564_44565_44566_44567_44568_44569_44570_44571_44572_44573_44574_44575_44576_44577_44578_44579_44580_44581_44582_44583_44584_44585_44586_44587_44588_44589_44590_44591_44592_44593_44594_44595_44596_44597_44598_44599_44600_44601_44602_44603_44604_44605_44606_44607_44608_44609_44610_44611_44612_44613_44614_44615_44616_44617_44618_44619_44620_44621_44622_44623_44624_44625_44626_44627_44628_44629_44630_44631_44632_44633_44634_44635_44636_44637_44638_44639_44640_44641_44642_44643_44644_44645_44646_44647_44648_44649_44650_44651_44652_44653_44654_44655_44656_44657_44658_44659_44660_44661_44662_44663_44664_44665_44666_44667_44668_44669_44670_44671_44672_44673_44674_44675_44676_44677_44678_44679_44680_44681_44682_44683_44684_44685_44686_44687_44688_44689_44690_44691_44692_44693_44694_44695_44696_44697_44698_44699_44700_44701_44702_44703_44704_44705_44706_44707_44708_44709_44710_44711_44712_44713_44714_44715_44716_44717_44718_44719_44720_44721_44722_44723_44724_44725_44726_44727_44728_44729_44730_44731_44732_44733_44734_44735_44736_44737_44738_44739_44740_44741_44742_44743_44744_44745_44746_44747_44748_44749_44750_44751_44752_44753_44754_44755_44756_44757_44758_44759_44760_44761_44762_44763_44764_44765_44766_44767_44768_44769_44770_44771_44772_44773_44774_44775_44776_44777_44778_44779_44780_44781_44782_44783_44784_44785_44786_44787_44788_44789_44790_44791_44792_44793_44794_44795_44796_44797_44798_44799_44800_44801_44802_44803_44804_44805_44806_44807_44808_44809_44810_44811_44812_44813_44814_44815_44816_44817_44818_44819_44820_44821_44822_44823_44824_44825_44826_44827_44828_44829_44830_44831_44832_44833_44834_44835_44836_44837_44838_44839_44840_44841_44842_44843_44844_44845_44846_44847_44848_44849_44850_44851_44852_44853_44854_44855_44856_44857_44858_44859_44860_44861_44862_44863_44864_44865_44866_44867_44868_44869_44870_44871_44872_44873_44874_44875_44876_44877_44878_44879_44880_44881_44882_44883_44884_44885_44886_44887_44888_44889_44890_44891_44892_44893_44894_44895_44896_44897_44898_44899_44900_44901_44902_44903_44904_44905_44906_44907_44908_44909_44910_44911_44912_44913_44914_44915_44916_44917_44918_44919_44920_44921_44922_44923_44924_44925_44926_44927_44928_44929_44930_44931_44932_44933_44934_44935_44936_44937_44938_44939_44940_44941_44942_44943_44944_44945_44946_44947_44948_44949_44950_44951_44952_44953_44954_44955_44956_44957_44958_44959_44960_44961_44962_44963_44964_44965_44966_44967_44968_44969_44970_44971_44972_44973_44974_44975_44976_44977_44978_44979_44980_44981_44982_44983_44984_44985_44986_44987_44988_44989_44990_44991_44992_44993_44994_44995_44996_44997_44998_44999_45000_45001_45002_45003_45004_45005_45006_45007_45008_45009_45010_45011_45012_45013_45014_45015_45016_45017_45018_45019_45020_45021_45022_45023_45024_45025_45026_45027_45028_45029_45030_45031_45032_45033_45034_45035_45036_45037_45038_45039_45040_45041_45042_45043_45044_45045_45046_45047_45048_45049_45050_45051_45052_45053_45054_45055_45056_45057_45058_45059_45060_45061_45062_45063_45064_45065_45066_45067_45068_45069_45070_45071_45072_45073_45074_45075_45076_45077_45078_45079_45080_45081_45082_45083_45084_45085_45086_45087_45088_45089_45090_45091_45092_45093_45094_45095_45096_45097_45098_45099_45100_45101_45102_45103_45104_45105_45106_45107_45108_45109_45110_45111_45112_45113_45114_45115_45116_45117_45118_45119_45120_45121_45122_45123_45124_45125_45126_45127_45128_45129_45130_45131_45132_45133_45134_45135_45136_45137_45138_45139_45140_45141_45142_45143_45144_45145_45146_45147_45148_45149_45150_45151_45152_45153_45154_45155_45156_45157_45158_45159_45160_45161_45162_45163_45164_45165_45166_45167_45168_45169_45170_45171_45172_45173_45174_45175_45176_45177_45178_45179_45180_45181_45182_45183_45184_45185_45186_45187_45188_45189_45190_45191_45192_45193_45194_45195_45196_45197_45198_45199_45200_45201_45202_45203_45204_45205_45206_45207_45208_45209_45210_45211_45212_45213_45214_45215_45216_45217_45218_45219_45220_45221_45222_45223_45224_45225_45226_45227_45228_45229_45230_45231_45232_45233_45234_45235_45236_45237_45238_45239_45240_45241_45242_45243_45244_45245_45246_45247_45248_45249_45250_45251_45252_45253_45254_45255_45256_45257_45258_45259_45260_45261_45262_45263_45264_45265_45266_45267_45268_45269_45270_45271_45272_45273_45274_45275_45276_45277_45278_45279_45280_45281_45282_45283_45284_45285_45286_45287_45288_45289_45290_45291_45292_45293_45294_45295_45296_45297_45298_45299_45300_45301_45302_45303_45304_45305_45306_45307_45308_45309_45310_45311_45312_45313_45314_45315_45316_45317_45318_45319_45320_45321_45322_45323_45324_45325_45326_45327_45328_45329_45330_45331_45332_45333_45334_45335_45336_45337_45338_45339_45340_45341_45342_45343_45344_45345_45346_45347_45348_45349_45350_45351_45352_45353_45354_45355_45356_45357_45358_45359_45360_45361_45362_45363_45364_45365_45366_45367_45368_45369_45370_45371_45372_45373_45374_45375_45376_45377_45378_45379_45380_45381_45382_45383_45384_45385_45386_45387_45388_45389_45390_45391_45392_45393_45394_45395_45396_45397_45398_45399_45400_45401_45402_45403_45404_45405_45406_45407_45408_45409_45410_45411_45412_45413_45414_45415_45416_45417_45418_45419_45420_45421_45422_45423_45424_45425_45426_45427_45428_45429_45430_45431_45432_45433_45434_45435_45436_45437_45438_45439_45440_45441_45442_45443_45444_45445_45446_45447_45448_45449_45450_45451_45452_45453_45454_45455_45456_45457_45458_45459_45460_45461_45462_45463_45464_45465_45466_45467_45468_45469_45470_45471_45472_45473_45474_45475_45476_45477_45478_45479_45480_45481_45482_45483_45484_45485_45486_45487_45488_45489_45490_45491_45492_45493_45494_45495_45496_45497_45498_45499_45500_45501_45502_45503_45504_45505_45506_45507_45508_45509_45510_45511_45512_45513_45514_45515_45516_45517_45518_45519_45520_45521_45522_45523_45524_45525_45526_45527_45528_45529_45530_45531_45532_45533_45534_45535_45536_45537_45538_45539_45540_45541_45542_45543_45544_45545_45546_45547_45548_45549_45550_45551_45552_45553_45554_45555_45556_45557_45558_45559_45560_45561_45562_45563_45564_45565_45566_45567_45568_45569_45570_45571_45572_45573_45574_45575_45576_45577_45578_45579_45580_45581_45582_45583_45584_45585_45586_45587_45588_45589_45590_45591_45592_45593_45594_45595_45596_45597_45598_45599_45600_45601_45602_45603_45604_45605_45606_45607_45608_45609_45610_45611_45612_45613_45614_45615_45616_45617_45618_45619_45620_45621_45622_45623_45624_45625_45626_45627_45628_45629_45630_45631_45632_45633_45634_45635_45636_45637_45638_45639_45640_45641_45642_45643_45644_45645_45646_45647_45648_45649_45650_45651_45652_45653_45654_45655_45656_45657_45658_45659_45660_45661_45662_45663_45664_45665_45666_45667_45668_45669_45670_45671_45672_45673_45674_45675_45676_45677_45678_45679_45680_45681_45682_45683_45684_45685_45686_45687_45688_45689_45690_45691_45692_45693_45694_45695_45696_45697_45698_45699_45700_45701_45702_45703_45704_45705_45706_45707_45708_45709_45710_45711_45712_45713_45714_45715_45716_45717_45718_45719_45720_45721_45722_45723_45724_45725_45726_45727_45728_45729_45730_45731_45732_45733_45734_45735_45736_45737_45738_45739_45740_45741_45742_45743_45744_45745_45746_45747_45748_45749_45750_45751_45752_45753_45754_45755_45756_45757_45758_45759_45760_45761_45762_45763_45764_45765_45766_45767_45768_45769_45770_45771_45772_45773_45774_45775_45776_45777_45778_45779_45780_45781_45782_45783_45784_45785_45786_45787_45788_45789_45790_45791_45792_45793_45794_45795_45796_45797_45798_45799_45800_45801_45802_45803_45804_45805_45806_45807_45808_45809_45810_45811_45812_45813_45814_45815_45816_45817_45818_45819_45820_45821_45822_45823_45824_45825_45826_45827_45828_45829_45830_45831_45832_45833_45834_45835_45836_45837_45838_45839_45840_45841_45842_45843_45844_45845_45846_45847_45848_45849_45850_45851_45852_45853_45854_45855_45856_45857_45858_45859_45860_45861_45862_45863_45864_45865_45866_45867_45868_45869_45870_45871_45872_45873_45874_45875_45876_45877_45878_45879_45880_45881_45882_45883_45884_45885_45886_45887_45888_45889_45890_45891_45892_45893_45894_45895_45896_45897_45898_45899_45900_45901_45902_45903_45904_45905_45906_45907_45908_45909_45910_45911_45912_45913_45914_45915_45916_45917_45918_45919_45920_45921_45922_45923_45924_45925_45926_45927_45928_45929_45930_45931_45932_45933_45934_45935_45936_45937_45938_45939_45940_45941_45942_45943_45944_45945_45946_45947_45948_45949_45950_45951_45952_45953_45954_45955_45956_45957_45958_45959_45960_45961_45962_45963_45964_45965_45966_45967_45968_45969_45970_45971_45972_45973_45974_45975_45976_45977_45978_45979_45980_45981_45982_45983_45984_45985_45986_45987_45988_45989_45990_45991_45992_45993_45994_45995_45996_45997_45998_45999_46000_46001_46002_46003_46004_46005_46006_46007_46008_46009_46010_46011_46012_46013_46014_46015_46016_46017_46018_46019_46020_46021_46022_46023_46024_46025_46026_46027_46028_46029_46030_46031_46032_46033_46034_46035_46036_46037_46038_46039_46040_46041_46042_46043_46044_46045_46046_46047_46048_46049_46050_46051_46052_46053_46054_46055_46056_46057_46058_46059_46060_46061_46062_46063_46064_46065_46066_46067_46068_46069_46070_46071_46072_46073_46074_46075_46076_46077_46078_46079_46080_46081_46082_46083_46084_46085_46086_46087_46088_46089_46090_46091_46092_46093_46094_46095_46096_46097_46098_46099_46100_46101_46102_46103_46104_46105_46106_46107_46108_46109_46110_46111_46112_46113_46114_46115_46116_46117_46118_46119_46120_46121_46122_46123_46124_46125_46126_46127_46128_46129_46130_46131_46132_46133_46134_46135_46136_46137_46138_46139_46140_46141_46142_46143_46144_46145_46146_46147_46148_46149_46150_46151_46152_46153_46154_46155_46156_46157_46158_46159_46160_46161_46162_46163_46164_46165_46166_46167_46168_46169_46170_46171_46172_46173_46174_46175_46176_46177_46178_46179_46180_46181_46182_46183_46184_46185_46186_46187_46188_46189_46190_46191_46192_46193_46194_46195_46196_46197_46198_46199_46200_46201_46202_46203_46204_46205_46206_46207_46208_46209_46210_46211_46212_46213_46214_46215_46216_46217_46218_46219_46220_46221_46222_46223_46224_46225_46226_46227_46228_46229_46230_46231_46232_46233_46234_46235_46236_46237_46238_46239_46240_46241_46242_46243_46244_46245_46246_46247_46248_46249_46250_46251_46252_46253_46254_46255_46256_46257_46258_46259_46260_46261_46262_46263_46264_46265_46266_46267_46268_46269_46270_46271_46272_46273_46274_46275_46276_46277_46278_46279_46280_46281_46282_46283_46284_46285_46286_46287_46288_46289_46290_46291_46292_46293_46294_46295_46296_46297_46298_46299_46300_46301_46302_46303_46304_46305_46306_46307_46308_46309_46310_46311_46312_46313_46314_46315_46316_46317_46318_46319_46320_46321_46322_46323_46324_46325_46326_46327_46328_46329_46330_46331_46332_46333_46334_46335_46336_46337_46338_46339_46340_46341_46342_46343_46344_46345_46346_46347_46348_46349_46350_46351_46352_46353_46354_46355_46356_46357_46358_46359_46360_46361_46362_46363_46364_46365_46366_46367_46368_46369_46370_46371_46372_46373_46374_46375_46376_46377_46378_46379_46380_46381_46382_46383_46384_46385_46386_46387_46388_46389_46390_46391_46392_46393_46394_46395_46396_46397_46398_46399_46400_46401_46402_46403_46404_46405_46406_46407_46408_46409_46410_46411_46412_46413_46414_46415_46416_46417_46418_46419_46420_46421_46422_46423_46424_46425_46426_46427_46428_46429_46430_46431_46432_46433_46434_46435_46436_46437_46438_46439_46440_46441_46442_46443_46444_46445_46446_46447_46448_46449_46450_46451_46452_46453_46454_46455_46456_46457_46458_46459_46460_46461_46462_46463_46464_46465_46466_46467_46468_46469_46470_46471_46472_46473_46474_46475_46476_46477_46478_46479_46480_46481_46482_46483_46484_46485_46486_46487_46488_46489_46490_46491_46492_46493_46494_46495_46496_46497_46498_46499_46500_46501_46502_46503_46504_46505_46506_46507_46508_46509_46510_46511_46512_46513_46514_46515_46516_46517_46518_46519_46520_46521_46522_46523_46524_46525_46526_46527_46528_46529_46530_46531_46532_46533_46534_46535_46536_46537_46538_46539_46540_46541_46542_46543_46544_46545_46546_46547_46548_46549_46550_46551_46552_46553_46554_46555_46556_46557_46558_46559_46560_46561_46562_46563_46564_46565_46566_46567_46568_46569_46570_46571_46572_46573_46574_46575_46576_46577_46578_46579_46580_46581_46582_46583_46584_46585_46586_46587_46588_46589_46590_46591_46592_46593_46594_46595_46596_46597_46598_46599_46600_46601_46602_46603_46604_46605_46606_46607_46608_46609_46610_46611_46612_46613_46614_46615_46616_46617_46618_46619_46620_46621_46622_46623_46624_46625_46626_46627_46628_46629_46630_46631_46632_46633_46634_46635_46636_46637_46638_46639_46640_46641_46642_46643_46644_46645_46646_46647_46648_46649_46650_46651_46652_46653_46654_46655_46656_46657_46658_46659_46660_46661_46662_46663_46664_46665_46666_46667_46668_46669_46670_46671_46672_46673_46674_46675_46676_46677_46678_46679_46680_46681_46682_46683_46684_46685_46686_46687_46688_46689_46690_46691_46692_46693_46694_46695_46696_46697_46698_46699_46700_46701_46702_46703_46704_46705_46706_46707_46708_46709_46710_46711_46712_46713_46714_46715_46716_46717_46718_46719_46720_46721_46722_46723_46724_46725_46726_46727_46728_46729_46730_46731_46732_46733_46734_46735_46736_46737_46738_46739_46740_46741_46742_46743_46744_46745_46746_46747_46748_46749_46750_46751_46752_46753_46754_46755_46756_46757_46758_46759_46760_46761_46762_46763_46764_46765_46766_46767_46768_46769_46770_46771_46772_46773_46774_46775_46776_46777_46778_46779_46780_46781_46782_46783_46784_46785_46786_46787_46788_46789_46790_46791_46792_46793_46794_46795_46796_46797_46798_46799_46800_46801_46802_46803_46804_46805_46806_46807_46808_46809_46810_46811_46812_46813_46814_46815_46816_46817_46818_46819_46820_46821_46822_46823_46824_46825_46826_46827_46828_46829_46830_46831_46832_46833_46834_46835_46836_46837_46838_46839_46840_46841_46842_46843_46844_46845_46846_46847_46848_46849_46850_46851_46852_46853_46854_46855_46856_46857_46858_46859_46860_46861_46862_46863_46864_46865_46866_46867_46868_46869_46870_46871_46872_46873_46874_46875_46876_46877_46878_46879_46880_46881_46882_46883_46884_46885_46886_46887_46888_46889_46890_46891_46892_46893_46894_46895_46896_46897_46898_46899_46900_46901_46902_46903_46904_46905_46906_46907_46908_46909_46910_46911_46912_46913_46914_46915_46916_46917_46918_46919_46920_46921_46922_46923_46924_46925_46926_46927_46928_46929_46930_46931_46932_46933_46934_46935_46936_46937_46938_46939_46940_46941_46942_46943_46944_46945_46946_46947_46948_46949_46950_46951_46952_46953_46954_46955_46956_46957_46958_46959_46960_46961_46962_46963_46964_46965_46966_46967_46968_46969_46970_46971_46972_46973_46974_46975_46976_46977_46978_46979_46980_46981_46982_46983_46984_46985_46986_46987_46988_46989_46990_46991_46992_46993_46994_46995_46996_46997_46998_46999_47000_47001_47002_47003_47004_47005_47006_47007_47008_47009_47010_47011_47012_47013_47014_47015_47016_47017_47018_47019_47020_47021_47022_47023_47024_47025_47026_47027_47028_47029_47030_47031_47032_47033_47034_47035_47036_47037_47038_47039_47040_47041_47042_47043_47044_47045_47046_47047_47048_47049_47050_47051_47052_47053_47054_47055_47056_47057_47058_47059_47060_47061_47062_47063_47064_47065_47066_47067_47068_47069_47070_47071_47072_47073_47074_47075_47076_47077_47078_47079_47080_47081_47082_47083_47084_47085_47086_47087_47088_47089_47090_47091_47092_47093_47094_47095_47096_47097_47098_47099_47100_47101_47102_47103_47104_47105_47106_47107_47108_47109_47110_47111_47112_47113_47114_47115_47116_47117_47118_47119_47120_47121_47122_47123_47124_47125_47126_47127_47128_47129_47130_47131_47132_47133_47134_47135_47136_47137_47138_47139_47140_47141_47142_47143_47144_47145_47146_47147_47148_47149_47150_47151_47152_47153_47154_47155_47156_47157_47158_47159_47160_47161_47162_47163_47164_47165_47166_47167_47168_47169_47170_47171_47172_47173_47174_47175_47176_47177_47178_47179_47180_47181_47182_47183_47184_47185_47186_47187_47188_47189_47190_47191_47192_47193_47194_47195_47196_47197_47198_47199_47200_47201_47202_47203_47204_47205_47206_47207_47208_47209_47210_47211_47212_47213_47214_47215_47216_47217_47218_47219_47220_47221_47222_47223_47224_47225_47226_47227_47228_47229_47230_47231_47232_47233_47234_47235_47236_47237_47238_47239_47240_47241_47242_47243_47244_47245_47246_47247_47248_47249_47250_47251_47252_47253_47254_47255_47256_47257_47258_47259_47260_47261_47262_47263_47264_47265_47266_47267_47268_47269_47270_47271_47272_47273_47274_47275_47276_47277_47278_47279_47280_47281_47282_47283_47284_47285_47286_47287_47288_47289_47290_47291_47292_47293_47294_47295_47296_47297_47298_47299_47300_47301_47302_47303_47304_47305_47306_47307_47308_47309_47310_47311_47312_47313_47314_47315_47316_47317_47318_47319_47320_47321_47322_47323_47324_47325_47326_47327_47328_47329_47330_47331_47332_47333_47334_47335_47336_47337_47338_47339_47340_47341_47342_47343_47344_47345_47346_47347_47348_47349_47350_47351_47352_47353_47354_47355_47356_47357_47358_47359_47360_47361_47362_47363_47364_47365_47366_47367_47368_47369_47370_47371_47372_47373_47374_47375_47376_47377_47378_47379_47380_47381_47382_47383_47384_47385_47386_47387_47388_47389_47390_47391_47392_47393_47394_47395_47396_47397_47398_47399_47400_47401_47402_47403_47404_47405_47406_47407_47408_47409_47410_47411_47412_47413_47414_47415_47416_47417_47418_47419_47420_47421_47422_47423_47424_47425_47426_47427_47428_47429_47430_47431_47432_47433_47434_47435_47436_47437_47438_47439_47440_47441_47442_47443_47444_47445_47446_47447_47448_47449_47450_47451_47452_47453_47454_47455_47456_47457_47458_47459_47460_47461_47462_47463_47464_47465_47466_47467_47468_47469_47470_47471_47472_47473_47474_47475_47476_47477_47478_47479_47480_47481_47482_47483_47484_47485_47486_47487_47488_47489_47490_47491_47492_47493_47494_47495_47496_47497_47498_47499_47500_47501_47502_47503_47504_47505_47506_47507_47508_47509_47510_47511_47512_47513_47514_47515_47516_47517_47518_47519_47520_47521_47522_47523_47524_47525_47526_47527_47528_47529_47530_47531_47532_47533_47534_47535_47536_47537_47538_47539_47540_47541_47542_47543_47544_47545_47546_47547_47548_47549_47550_47551_47552_47553_47554_47555_47556_47557_47558_47559_47560_47561_47562_47563_47564_47565_47566_47567_47568_47569_47570_47571_47572_47573_47574_47575_47576_47577_47578_47579_47580_47581_47582_47583_47584_47585_47586_47587_47588_47589_47590_47591_47592_47593_47594_47595_47596_47597_47598_47599_47600_47601_47602_47603_47604_47605_47606_47607_47608_47609_47610_47611_47612_47613_47614_47615_47616_47617_47618_47619_47620_47621_47622_47623_47624_47625_47626_47627_47628_47629_47630_47631_47632_47633_47634_47635_47636_47637_47638_47639_47640_47641_47642_47643_47644_47645_47646_47647_47648_47649_47650_47651_47652_47653_47654_47655_47656_47657_47658_47659_47660_47661_47662_47663_47664_47665_47666_47667_47668_47669_47670_47671_47672_47673_47674_47675_47676_47677_47678_47679_47680_47681_47682_47683_47684_47685_47686_47687_47688_47689_47690_47691_47692_47693_47694_47695_47696_47697_47698_47699_47700_47701_47702_47703_47704_47705_47706_47707_47708_47709_47710_47711_47712_47713_47714_47715_47716_47717_47718_47719_47720_47721_47722_47723_47724_47725_47726_47727_47728_47729_47730_47731_47732_47733_47734_47735_47736_47737_47738_47739_47740_47741_47742_47743_47744_47745_47746_47747_47748_47749_47750_47751_47752_47753_47754_47755_47756_47757_47758_47759_47760_47761_47762_47763_47764_47765_47766_47767_47768_47769_47770_47771_47772_47773_47774_47775_47776_47777_47778_47779_47780_47781_47782_47783_47784_47785_47786_47787_47788_47789_47790_47791_47792_47793_47794_47795_47796_47797_47798_47799_47800_47801_47802_47803_47804_47805_47806_47807_47808_47809_47810_47811_47812_47813_47814_47815_47816_47817_47818_47819_47820_47821_47822_47823_47824_47825_47826_47827_47828_47829_47830_47831_47832_47833_47834_47835_47836_47837_47838_47839_47840_47841_47842_47843_47844_47845_47846_47847_47848_47849_47850_47851_47852_47853_47854_47855_47856_47857_47858_47859_47860_47861_47862_47863_47864_47865_47866_47867_47868_47869_47870_47871_47872_47873_47874_47875_47876_47877_47878_47879_47880_47881_47882_47883_47884_47885_47886_47887_47888_47889_47890_47891_47892_47893_47894_47895_47896_47897_47898_47899_47900_47901_47902_47903_47904_47905_47906_47907_47908_47909_47910_47911_47912_47913_47914_47915_47916_47917_47918_47919_47920_47921_47922_47923_47924_47925_47926_47927_47928_47929_47930_47931_47932_47933_47934_47935_47936_47937_47938_47939_47940_47941_47942_47943_47944_47945_47946_47947_47948_47949_47950_47951_47952_47953_47954_47955_47956_47957_47958_47959_47960_47961_47962_47963_47964_47965_47966_47967_47968_47969_47970_47971_47972_47973_47974_47975_47976_47977_47978_47979_47980_47981_47982_47983_47984_47985_47986_47987_47988_47989_47990_47991_47992_47993_47994_47995_47996_47997_47998_47999_48000_48001_48002_48003_48004_48005_48006_48007_48008_48009_48010_48011_48012_48013_48014_48015_48016_48017_48018_48019_48020_48021_48022_48023_48024_48025_48026_48027_48028_48029_48030_48031_48032_48033_48034_48035_48036_48037_48038_48039_48040_48041_48042_48043_48044_48045_48046_48047_48048_48049_48050_48051_48052_48053_48054_48055_48056_48057_48058_48059_48060_48061_48062_48063_48064_48065_48066_48067_48068_48069_48070_48071_48072_48073_48074_48075_48076_48077_48078_48079_48080_48081_48082_48083_48084_48085_48086_48087_48088_48089_48090_48091_48092_48093_48094_48095_48096_48097_48098_48099_48100_48101_48102_48103_48104_48105_48106_48107_48108_48109_48110_48111_48112_48113_48114_48115_48116_48117_48118_48119_48120_48121_48122_48123_48124_48125_48126_48127_48128_48129_48130_48131_48132_48133_48134_48135_48136_48137_48138_48139_48140_48141_48142_48143_48144_48145_48146_48147_48148_48149_48150_48151_48152_48153_48154_48155_48156_48157_48158_48159_48160_48161_48162_48163_48164_48165_48166_48167_48168_48169_48170_48171_48172_48173_48174_48175_48176_48177_48178_48179_48180_48181_48182_48183_48184_48185_48186_48187_48188_48189_48190_48191_48192_48193_48194_48195_48196_48197_48198_48199_48200_48201_48202_48203_48204_48205_48206_48207_48208_48209_48210_48211_48212_48213_48214_48215_48216_48217_48218_48219_48220_48221_48222_48223_48224_48225_48226_48227_48228_48229_48230_48231_48232_48233_48234_48235_48236_48237_48238_48239_48240_48241_48242_48243_48244_48245_48246_48247_48248_48249_48250_48251_48252_48253_48254_48255_48256_48257_48258_48259_48260_48261_48262_48263_48264_48265_48266_48267_48268_48269_48270_48271_48272_48273_48274_48275_48276_48277_48278_48279_48280_48281_48282_48283_48284_48285_48286_48287_48288_48289_48290_48291_48292_48293_48294_48295_48296_48297_48298_48299_48300_48301_48302_48303_48304_48305_48306_48307_48308_48309_48310_48311_48312_48313_48314_48315_48316_48317_48318_48319_48320_48321_48322_48323_48324_48325_48326_48327_48328_48329_48330_48331_48332_48333_48334_48335_48336_48337_48338_48339_48340_48341_48342_48343_48344_48345_48346_48347_48348_48349_48350_48351_48352_48353_48354_48355_48356_48357_48358_48359_48360_48361_48362_48363_48364_48365_48366_48367_48368_48369_48370_48371_48372_48373_48374_48375_48376_48377_48378_48379_48380_48381_48382_48383_48384_48385_48386_48387_48388_48389_48390_48391_48392_48393_48394_48395_48396_48397_48398_48399_48400_48401_48402_48403_48404_48405_48406_48407_48408_48409_48410_48411_48412_48413_48414_48415_48416_48417_48418_48419_48420_48421_48422_48423_48424_48425_48426_48427_48428_48429_48430_48431_48432_48433_48434_48435_48436_48437_48438_48439_48440_48441_48442_48443_48444_48445_48446_48447_48448_48449_48450_48451_48452_48453_48454_48455_48456_48457_48458_48459_48460_48461_48462_48463_48464_48465_48466_48467_48468_48469_48470_48471_48472_48473_48474_48475_48476_48477_48478_48479_48480_48481_48482_48483_48484_48485_48486_48487_48488_48489_48490_48491_48492_48493_48494_48495_48496_48497_48498_48499_48500_48501_48502_48503_48504_48505_48506_48507_48508_48509_48510_48511_48512_48513_48514_48515_48516_48517_48518_48519_48520_48521_48522_48523_48524_48525_48526_48527_48528_48529_48530_48531_48532_48533_48534_48535_48536_48537_48538_48539_48540_48541_48542_48543_48544_48545_48546_48547_48548_48549_48550_48551_48552_48553_48554_48555_48556_48557_48558_48559_48560_48561_48562_48563_48564_48565_48566_48567_48568_48569_48570_48571_48572_48573_48574_48575_48576_48577_48578_48579_48580_48581_48582_48583_48584_48585_48586_48587_48588_48589_48590_48591_48592_48593_48594_48595_48596_48597_48598_48599_48600_48601_48602_48603_48604_48605_48606_48607_48608_48609_48610_48611_48612_48613_48614_48615_48616_48617_48618_48619_48620_48621_48622_48623_48624_48625_48626_48627_48628_48629_48630_48631_48632_48633_48634_48635_48636_48637_48638_48639_48640_48641_48642_48643_48644_48645_48646_48647_48648_48649_48650_48651_48652_48653_48654_48655_48656_48657_48658_48659_48660_48661_48662_48663_48664_48665_48666_48667_48668_48669_48670_48671_48672_48673_48674_48675_48676_48677_48678_48679_48680_48681_48682_48683_48684_48685_48686_48687_48688_48689_48690_48691_48692_48693_48694_48695_48696_48697_48698_48699_48700_48701_48702_48703_48704_48705_48706_48707_48708_48709_48710_48711_48712_48713_48714_48715_48716_48717_48718_48719_48720_48721_48722_48723_48724_48725_48726_48727_48728_48729_48730_48731_48732_48733_48734_48735_48736_48737_48738_48739_48740_48741_48742_48743_48744_48745_48746_48747_48748_48749_48750_48751_48752_48753_48754_48755_48756_48757_48758_48759_48760_48761_48762_48763_48764_48765_48766_48767_48768_48769_48770_48771_48772_48773_48774_48775_48776_48777_48778_48779_48780_48781_48782_48783_48784_48785_48786_48787_48788_48789_48790_48791_48792_48793_48794_48795_48796_48797_48798_48799_48800_48801_48802_48803_48804_48805_48806_48807_48808_48809_48810_48811_48812_48813_48814_48815_48816_48817_48818_48819_48820_48821_48822_48823_48824_48825_48826_48827_48828_48829_48830_48831_48832_48833_48834_48835_48836_48837_48838_48839_48840_48841_48842_48843_48844_48845_48846_48847_48848_48849_48850_48851_48852_48853_48854_48855_48856_48857_48858_48859_48860_48861_48862_48863_48864_48865_48866_48867_48868_48869_48870_48871_48872_48873_48874_48875_48876_48877_48878_48879_48880_48881_48882_48883_48884_48885_48886_48887_48888_48889_48890_48891_48892_48893_48894_48895_48896_48897_48898_48899_48900_48901_48902_48903_48904_48905_48906_48907_48908_48909_48910_48911_48912_48913_48914_48915_48916_48917_48918_48919_48920_48921_48922_48923_48924_48925_48926_48927_48928_48929_48930_48931_48932_48933_48934_48935_48936_48937_48938_48939_48940_48941_48942_48943_48944_48945_48946_48947_48948_48949_48950_48951_48952_48953_48954_48955_48956_48957_48958_48959_48960_48961_48962_48963_48964_48965_48966_48967_48968_48969_48970_48971_48972_48973_48974_48975_48976_48977_48978_48979_48980_48981_48982_48983_48984_48985_48986_48987_48988_48989_48990_48991_48992_48993_48994_48995_48996_48997_48998_48999_49000_49001_49002_49003_49004_49005_49006_49007_49008_49009_49010_49011_49012_49013_49014_49015_49016_49017_49018_49019_49020_49021_49022_49023_49024_49025_49026_49027_49028_49029_49030_49031_49032_49033_49034_49035_49036_49037_49038_49039_49040_49041_49042_49043_49044_49045_49046_49047_49048_49049_49050_49051_49052_49053_49054_49055_49056_49057_49058_49059_49060_49061_49062_49063_49064_49065_49066_49067_49068_49069_49070_49071_49072_49073_49074_49075_49076_49077_49078_49079_49080_49081_49082_49083_49084_49085_49086_49087_49088_49089_49090_49091_49092_49093_49094_49095_49096_49097_49098_49099_49100_49101_49102_49103_49104_49105_49106_49107_49108_49109_49110_49111_49112_49113_49114_49115_49116_49117_49118_49119_49120_49121_49122_49123_49124_49125_49126_49127_49128_49129_49130_49131_49132_49133_49134_49135_49136_49137_49138_49139_49140_49141_49142_49143_49144_49145_49146_49147_49148_49149_49150_49151_49152_49153_49154_49155_49156_49157_49158_49159_49160_49161_49162_49163_49164_49165_49166_49167_49168_49169_49170_49171_49172_49173_49174_49175_49176_49177_49178_49179_49180_49181_49182_49183_49184_49185_49186_49187_49188_49189_49190_49191_49192_49193_49194_49195_49196_49197_49198_49199_49200_49201_49202_49203_49204_49205_49206_49207_49208_49209_49210_49211_49212_49213_49214_49215_49216_49217_49218_49219_49220_49221_49222_49223_49224_49225_49226_49227_49228_49229_49230_49231_49232_49233_49234_49235_49236_49237_49238_49239_49240_49241_49242_49243_49244_49245_49246_49247_49248_49249_49250_49251_49252_49253_49254_49255_49256_49257_49258_49259_49260_49261_49262_49263_49264_49265_49266_49267_49268_49269_49270_49271_49272_49273_49274_49275_49276_49277_49278_49279_49280_49281_49282_49283_49284_49285_49286_49287_49288_49289_49290_49291_49292_49293_49294_49295_49296_49297_49298_49299_49300_49301_49302_49303_49304_49305_49306_49307_49308_49309_49310_49311_49312_49313_49314_49315_49316_49317_49318_49319_49320_49321_49322_49323_49324_49325_49326_49327_49328_49329_49330_49331_49332_49333_49334_49335_49336_49337_49338_49339_49340_49341_49342_49343_49344_49345_49346_49347_49348_49349_49350_49351_49352_49353_49354_49355_49356_49357_49358_49359_49360_49361_49362_49363_49364_49365_49366_49367_49368_49369_49370_49371_49372_49373_49374_49375_49376_49377_49378_49379_49380_49381_49382_49383_49384_49385_49386_49387_49388_49389_49390_49391_49392_49393_49394_49395_49396_49397_49398_49399_49400_49401_49402_49403_49404_49405_49406_49407_49408_49409_49410_49411_49412_49413_49414_49415_49416_49417_49418_49419_49420_49421_49422_49423_49424_49425_49426_49427_49428_49429_49430_49431_49432_49433_49434_49435_49436_49437_49438_49439_49440_49441_49442_49443_49444_49445_49446_49447_49448_49449_49450_49451_49452_49453_49454_49455_49456_49457_49458_49459_49460_49461_49462_49463_49464_49465_49466_49467_49468_49469_49470_49471_49472_49473_49474_49475_49476_49477_49478_49479_49480_49481_49482_49483_49484_49485_49486_49487_49488_49489_49490_49491_49492_49493_49494_49495_49496_49497_49498_49499_49500_49501_49502_49503_49504_49505_49506_49507_49508_49509_49510_49511_49512_49513_49514_49515_49516_49517_49518_49519_49520_49521_49522_49523_49524_49525_49526_49527_49528_49529_49530_49531_49532_49533_49534_49535_49536_49537_49538_49539_49540_49541_49542_49543_49544_49545_49546_49547_49548_49549_49550_49551_49552_49553_49554_49555_49556_49557_49558_49559_49560_49561_49562_49563_49564_49565_49566_49567_49568_49569_49570_49571_49572_49573_49574_49575_49576_49577_49578_49579_49580_49581_49582_49583_49584_49585_49586_49587_49588_49589_49590_49591_49592_49593_49594_49595_49596_49597_49598_49599_49600_49601_49602_49603_49604_49605_49606_49607_49608_49609_49610_49611_49612_49613_49614_49615_49616_49617_49618_49619_49620_49621_49622_49623_49624_49625_49626_49627_49628_49629_49630_49631_49632_49633_49634_49635_49636_49637_49638_49639_49640_49641_49642_49643_49644_49645_49646_49647_49648_49649_49650_49651_49652_49653_49654_49655_49656_49657_49658_49659_49660_49661_49662_49663_49664_49665_49666_49667_49668_49669_49670_49671_49672_49673_49674_49675_49676_49677_49678_49679_49680_49681_49682_49683_49684_49685_49686_49687_49688_49689_49690_49691_49692_49693_49694_49695_49696_49697_49698_49699_49700_49701_49702_49703_49704_49705_49706_49707_49708_49709_49710_49711_49712_49713_49714_49715_49716_49717_49718_49719_49720_49721_49722_49723_49724_49725_49726_49727_49728_49729_49730_49731_49732_49733_49734_49735_49736_49737_49738_49739_49740_49741_49742_49743_49744_49745_49746_49747_49748_49749_49750_49751_49752_49753_49754_49755_49756_49757_49758_49759_49760_49761_49762_49763_49764_49765_49766_49767_49768_49769_49770_49771_49772_49773_49774_49775_49776_49777_49778_49779_49780_49781_49782_49783_49784_49785_49786_49787_49788_49789_49790_49791_49792_49793_49794_49795_49796_49797_49798_49799_49800_49801_49802_49803_49804_49805_49806_49807_49808_49809_49810_49811_49812_49813_49814_49815_49816_49817_49818_49819_49820_49821_49822_49823_49824_49825_49826_49827_49828_49829_49830_49831_49832_49833_49834_49835_49836_49837_49838_49839_49840_49841_49842_49843_49844_49845_49846_49847_49848_49849_49850_49851_49852_49853_49854_49855_49856_49857_49858_49859_49860_49861_49862_49863_49864_49865_49866_49867_49868_49869_49870_49871_49872_49873_49874_49875_49876_49877_49878_49879_49880_49881_49882_49883_49884_49885_49886_49887_49888_49889_49890_49891_49892_49893_49894_49895_49896_49897_49898_49899_49900_49901_49902_49903_49904_49905_49906_49907_49908_49909_49910_49911_49912_49913_49914_49915_49916_49917_49918_49919_49920_49921_49922_49923_49924_49925_49926_49927_49928_49929_49930_49931_49932_49933_49934_49935_49936_49937_49938_49939_49940_49941_49942_49943_49944_49945_49946_49947_49948_49949_49950_49951_49952_49953_49954_49955_49956_49957_49958_49959_49960_49961_49962_49963_49964_49965_49966_49967_49968_49969_49970_49971_49972_49973_49974_49975_49976_49977_49978_49979_49980_49981_49982_49983_49984_49985_49986_49987_49988_49989_49990_49991_49992_49993_49994_49995_49996_49997_49998_49999_50000_50001_50002_50003_50004_50005_50006_50007_50008_50009_50010_50011_50012_50013_50014_50015_50016_50017_50018_50019_50020_50021_50022_50023_50024_50025_50026_50027_50028_50029_50030_50031_50032_50033_50034_50035_50036_50037_50038_50039_50040_50041_50042_50043_50044_50045_50046_50047_50048_50049_50050_50051_50052_50053_50054_50055_50056_50057_50058_50059_50060_50061_50062_50063_50064_50065_50066_50067_50068_50069_50070_50071_50072_50073_50074_50075_50076_50077_50078_50079_50080_50081_50082_50083_50084_50085_50086_50087_50088_50089_50090_50091_50092_50093_50094_50095_50096_50097_50098_50099_50100_50101_50102_50103_50104_50105_50106_50107_50108_50109_50110_50111_50112_50113_50114_50115_50116_50117_50118_50119_50120_50121_50122_50123_50124_50125_50126_50127_50128_50129_50130_50131_50132_50133_50134_50135_50136_50137_50138_50139_50140_50141_50142_50143_50144_50145_50146_50147_50148_50149_50150_50151_50152_50153_50154_50155_50156_50157_50158_50159_50160_50161_50162_50163_50164_50165_50166_50167_50168_50169_50170_50171_50172_50173_50174_50175_50176_50177_50178_50179_50180_50181_50182_50183_50184_50185_50186_50187_50188_50189_50190_50191_50192_50193_50194_50195_50196_50197_50198_50199_50200_50201_50202_50203_50204_50205_50206_50207_50208_50209_50210_50211_50212_50213_50214_50215_50216_50217_50218_50219_50220_50221_50222_50223_50224_50225_50226_50227_50228_50229_50230_50231_50232_50233_50234_50235_50236_50237_50238_50239_50240_50241_50242_50243_50244_50245_50246_50247_50248_50249_50250_50251_50252_50253_50254_50255_50256_50257_50258_50259_50260_50261_50262_50263_50264_50265_50266_50267_50268_50269_50270_50271_50272_50273_50274_50275_50276_50277_50278_50279_50280_50281_50282_50283_50284_50285_50286_50287_50288_50289_50290_50291_50292_50293_50294_50295_50296_50297_50298_50299_50300_50301_50302_50303_50304_50305_50306_50307_50308_50309_50310_50311_50312_50313_50314_50315_50316_50317_50318_50319_50320_50321_50322_50323_50324_50325_50326_50327_50328_50329_50330_50331_50332_50333_50334_50335_50336_50337_50338_50339_50340_50341_50342_50343_50344_50345_50346_50347_50348_50349_50350_50351_50352_50353_50354_50355_50356_50357_50358_50359_50360_50361_50362_50363_50364_50365_50366_50367_50368_50369_50370_50371_50372_50373_50374_50375_50376_50377_50378_50379_50380_50381_50382_50383_50384_50385_50386_50387_50388_50389_50390_50391_50392_50393_50394_50395_50396_50397_50398_50399_50400_50401_50402_50403_50404_50405_50406_50407_50408_50409_50410_50411_50412_50413_50414_50415_50416_50417_50418_50419_50420_50421_50422_50423_50424_50425_50426_50427_50428_50429_50430_50431_50432_50433_50434_50435_50436_50437_50438_50439_50440_50441_50442_50443_50444_50445_50446_50447_50448_50449_50450_50451_50452_50453_50454_50455_50456_50457_50458_50459_50460_50461_50462_50463_50464_50465_50466_50467_50468_50469_50470_50471_50472_50473_50474_50475_50476_50477_50478_50479_50480_50481_50482_50483_50484_50485_50486_50487_50488_50489_50490_50491_50492_50493_50494_50495_50496_50497_50498_50499_50500_50501_50502_50503_50504_50505_50506_50507_50508_50509_50510_50511_50512_50513_50514_50515_50516_50517_50518_50519_50520_50521_50522_50523_50524_50525_50526_50527_50528_50529_50530_50531_50532_50533_50534_50535_50536_50537_50538_50539_50540_50541_50542_50543_50544_50545_50546_50547_50548_50549_50550_50551_50552_50553_50554_50555_50556_50557_50558_50559_50560_50561_50562_50563_50564_50565_50566_50567_50568_50569_50570_50571_50572_50573_50574_50575_50576_50577_50578_50579_50580_50581_50582_50583_50584_50585_50586_50587_50588_50589_50590_50591_50592_50593_50594_50595_50596_50597_50598_50599_50600_50601_50602_50603_50604_50605_50606_50607_50608_50609_50610_50611_50612_50613_50614_50615_50616_50617_50618_50619_50620_50621_50622_50623_50624_50625_50626_50627_50628_50629_50630_50631_50632_50633_50634_50635_50636_50637_50638_50639_50640_50641_50642_50643_50644_50645_50646_50647_50648_50649_50650_50651_50652_50653_50654_50655_50656_50657_50658_50659_50660_50661_50662_50663_50664_50665_50666_50667_50668_50669_50670_50671_50672_50673_50674_50675_50676_50677_50678_50679_50680_50681_50682_50683_50684_50685_50686_50687_50688_50689_50690_50691_50692_50693_50694_50695_50696_50697_50698_50699_50700_50701_50702_50703_50704_50705_50706_50707_50708_50709_50710_50711_50712_50713_50714_50715_50716_50717_50718_50719_50720_50721_50722_50723_50724_50725_50726_50727_50728_50729_50730_50731_50732_50733_50734_50735_50736_50737_50738_50739_50740_50741_50742_50743_50744_50745_50746_50747_50748_50749_50750_50751_50752_50753_50754_50755_50756_50757_50758_50759_50760_50761_50762_50763_50764_50765_50766_50767_50768_50769_50770_50771_50772_50773_50774_50775_50776_50777_50778_50779_50780_50781_50782_50783_50784_50785_50786_50787_50788_50789_50790_50791_50792_50793_50794_50795_50796_50797_50798_50799_50800_50801_50802_50803_50804_50805_50806_50807_50808_50809_50810_50811_50812_50813_50814_50815_50816_50817_50818_50819_50820_50821_50822_50823_50824_50825_50826_50827_50828_50829_50830_50831_50832_50833_50834_50835_50836_50837_50838_50839_50840_50841_50842_50843_50844_50845_50846_50847_50848_50849_50850_50851_50852_50853_50854_50855_50856_50857_50858_50859_50860_50861_50862_50863_50864_50865_50866_50867_50868_50869_50870_50871_50872_50873_50874_50875_50876_50877_50878_50879_50880_50881_50882_50883_50884_50885_50886_50887_50888_50889_50890_50891_50892_50893_50894_50895_50896_50897_50898_50899_50900_50901_50902_50903_50904_50905_50906_50907_50908_50909_50910_50911_50912_50913_50914_50915_50916_50917_50918_50919_50920_50921_50922_50923_50924_50925_50926_50927_50928_50929_50930_50931_50932_50933_50934_50935_50936_50937_50938_50939_50940_50941_50942_50943_50944_50945_50946_50947_50948_50949_50950_50951_50952_50953_50954_50955_50956_50957_50958_50959_50960_50961_50962_50963_50964_50965_50966_50967_50968_50969_50970_50971_50972_50973_50974_50975_50976_50977_50978_50979_50980_50981_50982_50983_50984_50985_50986_50987_50988_50989_50990_50991_50992_50993_50994_50995_50996_50997_50998_50999_51000_51001_51002_51003_51004_51005_51006_51007_51008_51009_51010_51011_51012_51013_51014_51015_51016_51017_51018_51019_51020_51021_51022_51023_51024_51025_51026_51027_51028_51029_51030_51031_51032_51033_51034_51035_51036_51037_51038_51039_51040_51041_51042_51043_51044_51045_51046_51047_51048_51049_51050_51051_51052_51053_51054_51055_51056_51057_51058_51059_51060_51061_51062_51063_51064_51065_51066_51067_51068_51069_51070_51071_51072_51073_51074_51075_51076_51077_51078_51079_51080_51081_51082_51083_51084_51085_51086_51087_51088_51089_51090_51091_51092_51093_51094_51095_51096_51097_51098_51099_51100_51101_51102_51103_51104_51105_51106_51107_51108_51109_51110_51111_51112_51113_51114_51115_51116_51117_51118_51119_51120_51121_51122_51123_51124_51125_51126_51127_51128_51129_51130_51131_51132_51133_51134_51135_51136_51137_51138_51139_51140_51141_51142_51143_51144_51145_51146_51147_51148_51149_51150_51151_51152_51153_51154_51155_51156_51157_51158_51159_51160_51161_51162_51163_51164_51165_51166_51167_51168_51169_51170_51171_51172_51173_51174_51175_51176_51177_51178_51179_51180_51181_51182_51183_51184_51185_51186_51187_51188_51189_51190_51191_51192_51193_51194_51195_51196_51197_51198_51199_51200_51201_51202_51203_51204_51205_51206_51207_51208_51209_51210_51211_51212_51213_51214_51215_51216_51217_51218_51219_51220_51221_51222_51223_51224_51225_51226_51227_51228_51229_51230_51231_51232_51233_51234_51235_51236_51237_51238_51239_51240_51241_51242_51243_51244_51245_51246_51247_51248_51249_51250_51251_51252_51253_51254_51255_51256_51257_51258_51259_51260_51261_51262_51263_51264_51265_51266_51267_51268_51269_51270_51271_51272_51273_51274_51275_51276_51277_51278_51279_51280_51281_51282_51283_51284_51285_51286_51287_51288_51289_51290_51291_51292_51293_51294_51295_51296_51297_51298_51299_51300_51301_51302_51303_51304_51305_51306_51307_51308_51309_51310_51311_51312_51313_51314_51315_51316_51317_51318_51319_51320_51321_51322_51323_51324_51325_51326_51327_51328_51329_51330_51331_51332_51333_51334_51335_51336_51337_51338_51339_51340_51341_51342_51343_51344_51345_51346_51347_51348_51349_51350_51351_51352_51353_51354_51355_51356_51357_51358_51359_51360_51361_51362_51363_51364_51365_51366_51367_51368_51369_51370_51371_51372_51373_51374_51375_51376_51377_51378_51379_51380_51381_51382_51383_51384_51385_51386_51387_51388_51389_51390_51391_51392_51393_51394_51395_51396_51397_51398_51399_51400_51401_51402_51403_51404_51405_51406_51407_51408_51409_51410_51411_51412_51413_51414_51415_51416_51417_51418_51419_51420_51421_51422_51423_51424_51425_51426_51427_51428_51429_51430_51431_51432_51433_51434_51435_51436_51437_51438_51439_51440_51441_51442_51443_51444_51445_51446_51447_51448_51449_51450_51451_51452_51453_51454_51455_51456_51457_51458_51459_51460_51461_51462_51463_51464_51465_51466_51467_51468_51469_51470_51471_51472_51473_51474_51475_51476_51477_51478_51479_51480_51481_51482_51483_51484_51485_51486_51487_51488_51489_51490_51491_51492_51493_51494_51495_51496_51497_51498_51499_51500_51501_51502_51503_51504_51505_51506_51507_51508_51509_51510_51511_51512_51513_51514_51515_51516_51517_51518_51519_51520_51521_51522_51523_51524_51525_51526_51527_51528_51529_51530_51531_51532_51533_51534_51535_51536_51537_51538_51539_51540_51541_51542_51543_51544_51545_51546_51547_51548_51549_51550_51551_51552_51553_51554_51555_51556_51557_51558_51559_51560_51561_51562_51563_51564_51565_51566_51567_51568_51569_51570_51571_51572_51573_51574_51575_51576_51577_51578_51579_51580_51581_51582_51583_51584_51585_51586_51587_51588_51589_51590_51591_51592_51593_51594_51595_51596_51597_51598_51599_51600_51601_51602_51603_51604_51605_51606_51607_51608_51609_51610_51611_51612_51613_51614_51615_51616_51617_51618_51619_51620_51621_51622_51623_51624_51625_51626_51627_51628_51629_51630_51631_51632_51633_51634_51635_51636_51637_51638_51639_51640_51641_51642_51643_51644_51645_51646_51647_51648_51649_51650_51651_51652_51653_51654_51655_51656_51657_51658_51659_51660_51661_51662_51663_51664_51665_51666_51667_51668_51669_51670_51671_51672_51673_51674_51675_51676_51677_51678_51679_51680_51681_51682_51683_51684_51685_51686_51687_51688_51689_51690_51691_51692_51693_51694_51695_51696_51697_51698_51699_51700_51701_51702_51703_51704_51705_51706_51707_51708_51709_51710_51711_51712_51713_51714_51715_51716_51717_51718_51719_51720_51721_51722_51723_51724_51725_51726_51727_51728_51729_51730_51731_51732_51733_51734_51735_51736_51737_51738_51739_51740_51741_51742_51743_51744_51745_51746_51747_51748_51749_51750_51751_51752_51753_51754_51755_51756_51757_51758_51759_51760_51761_51762_51763_51764_51765_51766_51767_51768_51769_51770_51771_51772_51773_51774_51775_51776_51777_51778_51779_51780_51781_51782_51783_51784_51785_51786_51787_51788_51789_51790_51791_51792_51793_51794_51795_51796_51797_51798_51799_51800_51801_51802_51803_51804_51805_51806_51807_51808_51809_51810_51811_51812_51813_51814_51815_51816_51817_51818_51819_51820_51821_51822_51823_51824_51825_51826_51827_51828_51829_51830_51831_51832_51833_51834_51835_51836_51837_51838_51839_51840_51841_51842_51843_51844_51845_51846_51847_51848_51849_51850_51851_51852_51853_51854_51855_51856_51857_51858_51859_51860_51861_51862_51863_51864_51865_51866_51867_51868_51869_51870_51871_51872_51873_51874_51875_51876_51877_51878_51879_51880_51881_51882_51883_51884_51885_51886_51887_51888_51889_51890_51891_51892_51893_51894_51895_51896_51897_51898_51899_51900_51901_51902_51903_51904_51905_51906_51907_51908_51909_51910_51911_51912_51913_51914_51915_51916_51917_51918_51919_51920_51921_51922_51923_51924_51925_51926_51927_51928_51929_51930_51931_51932_51933_51934_51935_51936_51937_51938_51939_51940_51941_51942_51943_51944_51945_51946_51947_51948_51949_51950_51951_51952_51953_51954_51955_51956_51957_51958_51959_51960_51961_51962_51963_51964_51965_51966_51967_51968_51969_51970_51971_51972_51973_51974_51975_51976_51977_51978_51979_51980_51981_51982_51983_51984_51985_51986_51987_51988_51989_51990_51991_51992_51993_51994_51995_51996_51997_51998_51999_52000_52001_52002_52003_52004_52005_52006_52007_52008_52009_52010_52011_52012_52013_52014_52015_52016_52017_52018_52019_52020_52021_52022_52023_52024_52025_52026_52027_52028_52029_52030_52031_52032_52033_52034_52035_52036_52037_52038_52039_52040_52041_52042_52043_52044_52045_52046_52047_52048_52049_52050_52051_52052_52053_52054_52055_52056_52057_52058_52059_52060_52061_52062_52063_52064_52065_52066_52067_52068_52069_52070_52071_52072_52073_52074_52075_52076_52077_52078_52079_52080_52081_52082_52083_52084_52085_52086_52087_52088_52089_52090_52091_52092_52093_52094_52095_52096_52097_52098_52099_52100_52101_52102_52103_52104_52105_52106_52107_52108_52109_52110_52111_52112_52113_52114_52115_52116_52117_52118_52119_52120_52121_52122_52123_52124_52125_52126_52127_52128_52129_52130_52131_52132_52133_52134_52135_52136_52137_52138_52139_52140_52141_52142_52143_52144_52145_52146_52147_52148_52149_52150_52151_52152_52153_52154_52155_52156_52157_52158_52159_52160_52161_52162_52163_52164_52165_52166_52167_52168_52169_52170_52171_52172_52173_52174_52175_52176_52177_52178_52179_52180_52181_52182_52183_52184_52185_52186_52187_52188_52189_52190_52191_52192_52193_52194_52195_52196_52197_52198_52199_52200_52201_52202_52203_52204_52205_52206_52207_52208_52209_52210_52211_52212_52213_52214_52215_52216_52217_52218_52219_52220_52221_52222_52223_52224_52225_52226_52227_52228_52229_52230_52231_52232_52233_52234_52235_52236_52237_52238_52239_52240_52241_52242_52243_52244_52245_52246_52247_52248_52249_52250_52251_52252_52253_52254_52255_52256_52257_52258_52259_52260_52261_52262_52263_52264_52265_52266_52267_52268_52269_52270_52271_52272_52273_52274_52275_52276_52277_52278_52279_52280_52281_52282_52283_52284_52285_52286_52287_52288_52289_52290_52291_52292_52293_52294_52295_52296_52297_52298_52299_52300_52301_52302_52303_52304_52305_52306_52307_52308_52309_52310_52311_52312_52313_52314_52315_52316_52317_52318_52319_52320_52321_52322_52323_52324_52325_52326_52327_52328_52329_52330_52331_52332_52333_52334_52335_52336_52337_52338_52339_52340_52341_52342_52343_52344_52345_52346_52347_52348_52349_52350_52351_52352_52353_52354_52355_52356_52357_52358_52359_52360_52361_52362_52363_52364_52365_52366_52367_52368_52369_52370_52371_52372_52373_52374_52375_52376_52377_52378_52379_52380_52381_52382_52383_52384_52385_52386_52387_52388_52389_52390_52391_52392_52393_52394_52395_52396_52397_52398_52399_52400_52401_52402_52403_52404_52405_52406_52407_52408_52409_52410_52411_52412_52413_52414_52415_52416_52417_52418_52419_52420_52421_52422_52423_52424_52425_52426_52427_52428_52429_52430_52431_52432_52433_52434_52435_52436_52437_52438_52439_52440_52441_52442_52443_52444_52445_52446_52447_52448_52449_52450_52451_52452_52453_52454_52455_52456_52457_52458_52459_52460_52461_52462_52463_52464_52465_52466_52467_52468_52469_52470_52471_52472_52473_52474_52475_52476_52477_52478_52479_52480_52481_52482_52483_52484_52485_52486_52487_52488_52489_52490_52491_52492_52493_52494_52495_52496_52497_52498_52499_52500_52501_52502_52503_52504_52505_52506_52507_52508_52509_52510_52511_52512_52513_52514_52515_52516_52517_52518_52519_52520_52521_52522_52523_52524_52525_52526_52527_52528_52529_52530_52531_52532_52533_52534_52535_52536_52537_52538_52539_52540_52541_52542_52543_52544_52545_52546_52547_52548_52549_52550_52551_52552_52553_52554_52555_52556_52557_52558_52559_52560_52561_52562_52563_52564_52565_52566_52567_52568_52569_52570_52571_52572_52573_52574_52575_52576_52577_52578_52579_52580_52581_52582_52583_52584_52585_52586_52587_52588_52589_52590_52591_52592_52593_52594_52595_52596_52597_52598_52599_52600_52601_52602_52603_52604_52605_52606_52607_52608_52609_52610_52611_52612_52613_52614_52615_52616_52617_52618_52619_52620_52621_52622_52623_52624_52625_52626_52627_52628_52629_52630_52631_52632_52633_52634_52635_52636_52637_52638_52639_52640_52641_52642_52643_52644_52645_52646_52647_52648_52649_52650_52651_52652_52653_52654_52655_52656_52657_52658_52659_52660_52661_52662_52663_52664_52665_52666_52667_52668_52669_52670_52671_52672_52673_52674_52675_52676_52677_52678_52679_52680_52681_52682_52683_52684_52685_52686_52687_52688_52689_52690_52691_52692_52693_52694_52695_52696_52697_52698_52699_52700_52701_52702_52703_52704_52705_52706_52707_52708_52709_52710_52711_52712_52713_52714_52715_52716_52717_52718_52719_52720_52721_52722_52723_52724_52725_52726_52727_52728_52729_52730_52731_52732_52733_52734_52735_52736_52737_52738_52739_52740_52741_52742_52743_52744_52745_52746_52747_52748_52749_52750_52751_52752_52753_52754_52755_52756_52757_52758_52759_52760_52761_52762_52763_52764_52765_52766_52767_52768_52769_52770_52771_52772_52773_52774_52775_52776_52777_52778_52779_52780_52781_52782_52783_52784_52785_52786_52787_52788_52789_52790_52791_52792_52793_52794_52795_52796_52797_52798_52799_52800_52801_52802_52803_52804_52805_52806_52807_52808_52809_52810_52811_52812_52813_52814_52815_52816_52817_52818_52819_52820_52821_52822_52823_52824_52825_52826_52827_52828_52829_52830_52831_52832_52833_52834_52835_52836_52837_52838_52839_52840_52841_52842_52843_52844_52845_52846_52847_52848_52849_52850_52851_52852_52853_52854_52855_52856_52857_52858_52859_52860_52861_52862_52863_52864_52865_52866_52867_52868_52869_52870_52871_52872_52873_52874_52875_52876_52877_52878_52879_52880_52881_52882_52883_52884_52885_52886_52887_52888_52889_52890_52891_52892_52893_52894_52895_52896_52897_52898_52899_52900_52901_52902_52903_52904_52905_52906_52907_52908_52909_52910_52911_52912_52913_52914_52915_52916_52917_52918_52919_52920_52921_52922_52923_52924_52925_52926_52927_52928_52929_52930_52931_52932_52933_52934_52935_52936_52937_52938_52939_52940_52941_52942_52943_52944_52945_52946_52947_52948_52949_52950_52951_52952_52953_52954_52955_52956_52957_52958_52959_52960_52961_52962_52963_52964_52965_52966_52967_52968_52969_52970_52971_52972_52973_52974_52975_52976_52977_52978_52979_52980_52981_52982_52983_52984_52985_52986_52987_52988_52989_52990_52991_52992_52993_52994_52995_52996_52997_52998_52999_53000_53001_53002_53003_53004_53005_53006_53007_53008_53009_53010_53011_53012_53013_53014_53015_53016_53017_53018_53019_53020_53021_53022_53023_53024_53025_53026_53027_53028_53029_53030_53031_53032_53033_53034_53035_53036_53037_53038_53039_53040_53041_53042_53043_53044_53045_53046_53047_53048_53049_53050_53051_53052_53053_53054_53055_53056_53057_53058_53059_53060_53061_53062_53063_53064_53065_53066_53067_53068_53069_53070_53071_53072_53073_53074_53075_53076_53077_53078_53079_53080_53081_53082_53083_53084_53085_53086_53087_53088_53089_53090_53091_53092_53093_53094_53095_53096_53097_53098_53099_53100_53101_53102_53103_53104_53105_53106_53107_53108_53109_53110_53111_53112_53113_53114_53115_53116_53117_53118_53119_53120_53121_53122_53123_53124_53125_53126_53127_53128_53129_53130_53131_53132_53133_53134_53135_53136_53137_53138_53139_53140_53141_53142_53143_53144_53145_53146_53147_53148_53149_53150_53151_53152_53153_53154_53155_53156_53157_53158_53159_53160_53161_53162_53163_53164_53165_53166_53167_53168_53169_53170_53171_53172_53173_53174_53175_53176_53177_53178_53179_53180_53181_53182_53183_53184_53185_53186_53187_53188_53189_53190_53191_53192_53193_53194_53195_53196_53197_53198_53199_53200_53201_53202_53203_53204_53205_53206_53207_53208_53209_53210_53211_53212_53213_53214_53215_53216_53217_53218_53219_53220_53221_53222_53223_53224_53225_53226_53227_53228_53229_53230_53231_53232_53233_53234_53235_53236_53237_53238_53239_53240_53241_53242_53243_53244_53245_53246_53247_53248_53249_53250_53251_53252_53253_53254_53255_53256_53257_53258_53259_53260_53261_53262_53263_53264_53265_53266_53267_53268_53269_53270_53271_53272_53273_53274_53275_53276_53277_53278_53279_53280_53281_53282_53283_53284_53285_53286_53287_53288_53289_53290_53291_53292_53293_53294_53295_53296_53297_53298_53299_53300_53301_53302_53303_53304_53305_53306_53307_53308_53309_53310_53311_53312_53313_53314_53315_53316_53317_53318_53319_53320_53321_53322_53323_53324_53325_53326_53327_53328_53329_53330_53331_53332_53333_53334_53335_53336_53337_53338_53339_53340_53341_53342_53343_53344_53345_53346_53347_53348_53349_53350_53351_53352_53353_53354_53355_53356_53357_53358_53359_53360_53361_53362_53363_53364_53365_53366_53367_53368_53369_53370_53371_53372_53373_53374_53375_53376_53377_53378_53379_53380_53381_53382_53383_53384_53385_53386_53387_53388_53389_53390_53391_53392_53393_53394_53395_53396_53397_53398_53399_53400_53401_53402_53403_53404_53405_53406_53407_53408_53409_53410_53411_53412_53413_53414_53415_53416_53417_53418_53419_53420_53421_53422_53423_53424_53425_53426_53427_53428_53429_53430_53431_53432_53433_53434_53435_53436_53437_53438_53439_53440_53441_53442_53443_53444_53445_53446_53447_53448_53449_53450_53451_53452_53453_53454_53455_53456_53457_53458_53459_53460_53461_53462_53463_53464_53465_53466_53467_53468_53469_53470_53471_53472_53473_53474_53475_53476_53477_53478_53479_53480_53481_53482_53483_53484_53485_53486_53487_53488_53489_53490_53491_53492_53493_53494_53495_53496_53497_53498_53499_53500_53501_53502_53503_53504_53505_53506_53507_53508_53509_53510_53511_53512_53513_53514_53515_53516_53517_53518_53519_53520_53521_53522_53523_53524_53525_53526_53527_53528_53529_53530_53531_53532_53533_53534_53535_53536_53537_53538_53539_53540_53541_53542_53543_53544_53545_53546_53547_53548_53549_53550_53551_53552_53553_53554_53555_53556_53557_53558_53559_53560_53561_53562_53563_53564_53565_53566_53567_53568_53569_53570_53571_53572_53573_53574_53575_53576_53577_53578_53579_53580_53581_53582_53583_53584_53585_53586_53587_53588_53589_53590_53591_53592_53593_53594_53595_53596_53597_53598_53599_53600_53601_53602_53603_53604_53605_53606_53607_53608_53609_53610_53611_53612_53613_53614_53615_53616_53617_53618_53619_53620_53621_53622_53623_53624_53625_53626_53627_53628_53629_53630_53631_53632_53633_53634_53635_53636_53637_53638_53639_53640_53641_53642_53643_53644_53645_53646_53647_53648_53649_53650_53651_53652_53653_53654_53655_53656_53657_53658_53659_53660_53661_53662_53663_53664_53665_53666_53667_53668_53669_53670_53671_53672_53673_53674_53675_53676_53677_53678_53679_53680_53681_53682_53683_53684_53685_53686_53687_53688_53689_53690_53691_53692_53693_53694_53695_53696_53697_53698_53699_53700_53701_53702_53703_53704_53705_53706_53707_53708_53709_53710_53711_53712_53713_53714_53715_53716_53717_53718_53719_53720_53721_53722_53723_53724_53725_53726_53727_53728_53729_53730_53731_53732_53733_53734_53735_53736_53737_53738_53739_53740_53741_53742_53743_53744_53745_53746_53747_53748_53749_53750_53751_53752_53753_53754_53755_53756_53757_53758_53759_53760_53761_53762_53763_53764_53765_53766_53767_53768_53769_53770_53771_53772_53773_53774_53775_53776_53777_53778_53779_53780_53781_53782_53783_53784_53785_53786_53787_53788_53789_53790_53791_53792_53793_53794_53795_53796_53797_53798_53799_53800_53801_53802_53803_53804_53805_53806_53807_53808_53809_53810_53811_53812_53813_53814_53815_53816_53817_53818_53819_53820_53821_53822_53823_53824_53825_53826_53827_53828_53829_53830_53831_53832_53833_53834_53835_53836_53837_53838_53839_53840_53841_53842_53843_53844_53845_53846_53847_53848_53849_53850_53851_53852_53853_53854_53855_53856_53857_53858_53859_53860_53861_53862_53863_53864_53865_53866_53867_53868_53869_53870_53871_53872_53873_53874_53875_53876_53877_53878_53879_53880_53881_53882_53883_53884_53885_53886_53887_53888_53889_53890_53891_53892_53893_53894_53895_53896_53897_53898_53899_53900_53901_53902_53903_53904_53905_53906_53907_53908_53909_53910_53911_53912_53913_53914_53915_53916_53917_53918_53919_53920_53921_53922_53923_53924_53925_53926_53927_53928_53929_53930_53931_53932_53933_53934_53935_53936_53937_53938_53939_53940_53941_53942_53943_53944_53945_53946_53947_53948_53949_53950_53951_53952_53953_53954_53955_53956_53957_53958_53959_53960_53961_53962_53963_53964_53965_53966_53967_53968_53969_53970_53971_53972_53973_53974_53975_53976_53977_53978_53979_53980_53981_53982_53983_53984_53985_53986_53987_53988_53989_53990_53991_53992_53993_53994_53995_53996_53997_53998_53999_54000_54001_54002_54003_54004_54005_54006_54007_54008_54009_54010_54011_54012_54013_54014_54015_54016_54017_54018_54019_54020_54021_54022_54023_54024_54025_54026_54027_54028_54029_54030_54031_54032_54033_54034_54035_54036_54037_54038_54039_54040_54041_54042_54043_54044_54045_54046_54047_54048_54049_54050_54051_54052_54053_54054_54055_54056_54057_54058_54059_54060_54061_54062_54063_54064_54065_54066_54067_54068_54069_54070_54071_54072_54073_54074_54075_54076_54077_54078_54079_54080_54081_54082_54083_54084_54085_54086_54087_54088_54089_54090_54091_54092_54093_54094_54095_54096_54097_54098_54099_54100_54101_54102_54103_54104_54105_54106_54107_54108_54109_54110_54111_54112_54113_54114_54115_54116_54117_54118_54119_54120_54121_54122_54123_54124_54125_54126_54127_54128_54129_54130_54131_54132_54133_54134_54135_54136_54137_54138_54139_54140_54141_54142_54143_54144_54145_54146_54147_54148_54149_54150_54151_54152_54153_54154_54155_54156_54157_54158_54159_54160_54161_54162_54163_54164_54165_54166_54167_54168_54169_54170_54171_54172_54173_54174_54175_54176_54177_54178_54179_54180_54181_54182_54183_54184_54185_54186_54187_54188_54189_54190_54191_54192_54193_54194_54195_54196_54197_54198_54199_54200_54201_54202_54203_54204_54205_54206_54207_54208_54209_54210_54211_54212_54213_54214_54215_54216_54217_54218_54219_54220_54221_54222_54223_54224_54225_54226_54227_54228_54229_54230_54231_54232_54233_54234_54235_54236_54237_54238_54239_54240_54241_54242_54243_54244_54245_54246_54247_54248_54249_54250_54251_54252_54253_54254_54255_54256_54257_54258_54259_54260_54261_54262_54263_54264_54265_54266_54267_54268_54269_54270_54271_54272_54273_54274_54275_54276_54277_54278_54279_54280_54281_54282_54283_54284_54285_54286_54287_54288_54289_54290_54291_54292_54293_54294_54295_54296_54297_54298_54299_54300_54301_54302_54303_54304_54305_54306_54307_54308_54309_54310_54311_54312_54313_54314_54315_54316_54317_54318_54319_54320_54321_54322_54323_54324_54325_54326_54327_54328_54329_54330_54331_54332_54333_54334_54335_54336_54337_54338_54339_54340_54341_54342_54343_54344_54345_54346_54347_54348_54349_54350_54351_54352_54353_54354_54355_54356_54357_54358_54359_54360_54361_54362_54363_54364_54365_54366_54367_54368_54369_54370_54371_54372_54373_54374_54375_54376_54377_54378_54379_54380_54381_54382_54383_54384_54385_54386_54387_54388_54389_54390_54391_54392_54393_54394_54395_54396_54397_54398_54399_54400_54401_54402_54403_54404_54405_54406_54407_54408_54409_54410_54411_54412_54413_54414_54415_54416_54417_54418_54419_54420_54421_54422_54423_54424_54425_54426_54427_54428_54429_54430_54431_54432_54433_54434_54435_54436_54437_54438_54439_54440_54441_54442_54443_54444_54445_54446_54447_54448_54449_54450_54451_54452_54453_54454_54455_54456_54457_54458_54459_54460_54461_54462_54463_54464_54465_54466_54467_54468_54469_54470_54471_54472_54473_54474_54475_54476_54477_54478_54479_54480_54481_54482_54483_54484_54485_54486_54487_54488_54489_54490_54491_54492_54493_54494_54495_54496_54497_54498_54499_54500_54501_54502_54503_54504_54505_54506_54507_54508_54509_54510_54511_54512_54513_54514_54515_54516_54517_54518_54519_54520_54521_54522_54523_54524_54525_54526_54527_54528_54529_54530_54531_54532_54533_54534_54535_54536_54537_54538_54539_54540_54541_54542_54543_54544_54545_54546_54547_54548_54549_54550_54551_54552_54553_54554_54555_54556_54557_54558_54559_54560_54561_54562_54563_54564_54565_54566_54567_54568_54569_54570_54571_54572_54573_54574_54575_54576_54577_54578_54579_54580_54581_54582_54583_54584_54585_54586_54587_54588_54589_54590_54591_54592_54593_54594_54595_54596_54597_54598_54599_54600_54601_54602_54603_54604_54605_54606_54607_54608_54609_54610_54611_54612_54613_54614_54615_54616_54617_54618_54619_54620_54621_54622_54623_54624_54625_54626_54627_54628_54629_54630_54631_54632_54633_54634_54635_54636_54637_54638_54639_54640_54641_54642_54643_54644_54645_54646_54647_54648_54649_54650_54651_54652_54653_54654_54655_54656_54657_54658_54659_54660_54661_54662_54663_54664_54665_54666_54667_54668_54669_54670_54671_54672_54673_54674_54675_54676_54677_54678_54679_54680_54681_54682_54683_54684_54685_54686_54687_54688_54689_54690_54691_54692_54693_54694_54695_54696_54697_54698_54699_54700_54701_54702_54703_54704_54705_54706_54707_54708_54709_54710_54711_54712_54713_54714_54715_54716_54717_54718_54719_54720_54721_54722_54723_54724_54725_54726_54727_54728_54729_54730_54731_54732_54733_54734_54735_54736_54737_54738_54739_54740_54741_54742_54743_54744_54745_54746_54747_54748_54749_54750_54751_54752_54753_54754_54755_54756_54757_54758_54759_54760_54761_54762_54763_54764_54765_54766_54767_54768_54769_54770_54771_54772_54773_54774_54775_54776_54777_54778_54779_54780_54781_54782_54783_54784_54785_54786_54787_54788_54789_54790_54791_54792_54793_54794_54795_54796_54797_54798_54799_54800_54801_54802_54803_54804_54805_54806_54807_54808_54809_54810_54811_54812_54813_54814_54815_54816_54817_54818_54819_54820_54821_54822_54823_54824_54825_54826_54827_54828_54829_54830_54831_54832_54833_54834_54835_54836_54837_54838_54839_54840_54841_54842_54843_54844_54845_54846_54847_54848_54849_54850_54851_54852_54853_54854_54855_54856_54857_54858_54859_54860_54861_54862_54863_54864_54865_54866_54867_54868_54869_54870_54871_54872_54873_54874_54875_54876_54877_54878_54879_54880_54881_54882_54883_54884_54885_54886_54887_54888_54889_54890_54891_54892_54893_54894_54895_54896_54897_54898_54899_54900_54901_54902_54903_54904_54905_54906_54907_54908_54909_54910_54911_54912_54913_54914_54915_54916_54917_54918_54919_54920_54921_54922_54923_54924_54925_54926_54927_54928_54929_54930_54931_54932_54933_54934_54935_54936_54937_54938_54939_54940_54941_54942_54943_54944_54945_54946_54947_54948_54949_54950_54951_54952_54953_54954_54955_54956_54957_54958_54959_54960_54961_54962_54963_54964_54965_54966_54967_54968_54969_54970_54971_54972_54973_54974_54975_54976_54977_54978_54979_54980_54981_54982_54983_54984_54985_54986_54987_54988_54989_54990_54991_54992_54993_54994_54995_54996_54997_54998_54999_55000_55001_55002_55003_55004_55005_55006_55007_55008_55009_55010_55011_55012_55013_55014_55015_55016_55017_55018_55019_55020_55021_55022_55023_55024_55025_55026_55027_55028_55029_55030_55031_55032_55033_55034_55035_55036_55037_55038_55039_55040_55041_55042_55043_55044_55045_55046_55047_55048_55049_55050_55051_55052_55053_55054_55055_55056_55057_55058_55059_55060_55061_55062_55063_55064_55065_55066_55067_55068_55069_55070_55071_55072_55073_55074_55075_55076_55077_55078_55079_55080_55081_55082_55083_55084_55085_55086_55087_55088_55089_55090_55091_55092_55093_55094_55095_55096_55097_55098_55099_55100_55101_55102_55103_55104_55105_55106_55107_55108_55109_55110_55111_55112_55113_55114_55115_55116_55117_55118_55119_55120_55121_55122_55123_55124_55125_55126_55127_55128_55129_55130_55131_55132_55133_55134_55135_55136_55137_55138_55139_55140_55141_55142_55143_55144_55145_55146_55147_55148_55149_55150_55151_55152_55153_55154_55155_55156_55157_55158_55159_55160_55161_55162_55163_55164_55165_55166_55167_55168_55169_55170_55171_55172_55173_55174_55175_55176_55177_55178_55179_55180_55181_55182_55183_55184_55185_55186_55187_55188_55189_55190_55191_55192_55193_55194_55195_55196_55197_55198_55199_55200_55201_55202_55203_55204_55205_55206_55207_55208_55209_55210_55211_55212_55213_55214_55215_55216_55217_55218_55219_55220_55221_55222_55223_55224_55225_55226_55227_55228_55229_55230_55231_55232_55233_55234_55235_55236_55237_55238_55239_55240_55241_55242_55243_55244_55245_55246_55247_55248_55249_55250_55251_55252_55253_55254_55255_55256_55257_55258_55259_55260_55261_55262_55263_55264_55265_55266_55267_55268_55269_55270_55271_55272_55273_55274_55275_55276_55277_55278_55279_55280_55281_55282_55283_55284_55285_55286_55287_55288_55289_55290_55291_55292_55293_55294_55295_55296_55297_55298_55299_55300_55301_55302_55303_55304_55305_55306_55307_55308_55309_55310_55311_55312_55313_55314_55315_55316_55317_55318_55319_55320_55321_55322_55323_55324_55325_55326_55327_55328_55329_55330_55331_55332_55333_55334_55335_55336_55337_55338_55339_55340_55341_55342_55343_55344_55345_55346_55347_55348_55349_55350_55351_55352_55353_55354_55355_55356_55357_55358_55359_55360_55361_55362_55363_55364_55365_55366_55367_55368_55369_55370_55371_55372_55373_55374_55375_55376_55377_55378_55379_55380_55381_55382_55383_55384_55385_55386_55387_55388_55389_55390_55391_55392_55393_55394_55395_55396_55397_55398_55399_55400_55401_55402_55403_55404_55405_55406_55407_55408_55409_55410_55411_55412_55413_55414_55415_55416_55417_55418_55419_55420_55421_55422_55423_55424_55425_55426_55427_55428_55429_55430_55431_55432_55433_55434_55435_55436_55437_55438_55439_55440_55441_55442_55443_55444_55445_55446_55447_55448_55449_55450_55451_55452_55453_55454_55455_55456_55457_55458_55459_55460_55461_55462_55463_55464_55465_55466_55467_55468_55469_55470_55471_55472_55473_55474_55475_55476_55477_55478_55479_55480_55481_55482_55483_55484_55485_55486_55487_55488_55489_55490_55491_55492_55493_55494_55495_55496_55497_55498_55499_55500_55501_55502_55503_55504_55505_55506_55507_55508_55509_55510_55511_55512_55513_55514_55515_55516_55517_55518_55519_55520_55521_55522_55523_55524_55525_55526_55527_55528_55529_55530_55531_55532_55533_55534_55535_55536_55537_55538_55539_55540_55541_55542_55543_55544_55545_55546_55547_55548_55549_55550_55551_55552_55553_55554_55555_55556_55557_55558_55559_55560_55561_55562_55563_55564_55565_55566_55567_55568_55569_55570_55571_55572_55573_55574_55575_55576_55577_55578_55579_55580_55581_55582_55583_55584_55585_55586_55587_55588_55589_55590_55591_55592_55593_55594_55595_55596_55597_55598_55599_55600_55601_55602_55603_55604_55605_55606_55607_55608_55609_55610_55611_55612_55613_55614_55615_55616_55617_55618_55619_55620_55621_55622_55623_55624_55625_55626_55627_55628_55629_55630_55631_55632_55633_55634_55635_55636_55637_55638_55639_55640_55641_55642_55643_55644_55645_55646_55647_55648_55649_55650_55651_55652_55653_55654_55655_55656_55657_55658_55659_55660_55661_55662_55663_55664_55665_55666_55667_55668_55669_55670_55671_55672_55673_55674_55675_55676_55677_55678_55679_55680_55681_55682_55683_55684_55685_55686_55687_55688_55689_55690_55691_55692_55693_55694_55695_55696_55697_55698_55699_55700_55701_55702_55703_55704_55705_55706_55707_55708_55709_55710_55711_55712_55713_55714_55715_55716_55717_55718_55719_55720_55721_55722_55723_55724_55725_55726_55727_55728_55729_55730_55731_55732_55733_55734_55735_55736_55737_55738_55739_55740_55741_55742_55743_55744_55745_55746_55747_55748_55749_55750_55751_55752_55753_55754_55755_55756_55757_55758_55759_55760_55761_55762_55763_55764_55765_55766_55767_55768_55769_55770_55771_55772_55773_55774_55775_55776_55777_55778_55779_55780_55781_55782_55783_55784_55785_55786_55787_55788_55789_55790_55791_55792_55793_55794_55795_55796_55797_55798_55799_55800_55801_55802_55803_55804_55805_55806_55807_55808_55809_55810_55811_55812_55813_55814_55815_55816_55817_55818_55819_55820_55821_55822_55823_55824_55825_55826_55827_55828_55829_55830_55831_55832_55833_55834_55835_55836_55837_55838_55839_55840_55841_55842_55843_55844_55845_55846_55847_55848_55849_55850_55851_55852_55853_55854_55855_55856_55857_55858_55859_55860_55861_55862_55863_55864_55865_55866_55867_55868_55869_55870_55871_55872_55873_55874_55875_55876_55877_55878_55879_55880_55881_55882_55883_55884_55885_55886_55887_55888_55889_55890_55891_55892_55893_55894_55895_55896_55897_55898_55899_55900_55901_55902_55903_55904_55905_55906_55907_55908_55909_55910_55911_55912_55913_55914_55915_55916_55917_55918_55919_55920_55921_55922_55923_55924_55925_55926_55927_55928_55929_55930_55931_55932_55933_55934_55935_55936_55937_55938_55939_55940_55941_55942_55943_55944_55945_55946_55947_55948_55949_55950_55951_55952_55953_55954_55955_55956_55957_55958_55959_55960_55961_55962_55963_55964_55965_55966_55967_55968_55969_55970_55971_55972_55973_55974_55975_55976_55977_55978_55979_55980_55981_55982_55983_55984_55985_55986_55987_55988_55989_55990_55991_55992_55993_55994_55995_55996_55997_55998_55999_56000_56001_56002_56003_56004_56005_56006_56007_56008_56009_56010_56011_56012_56013_56014_56015_56016_56017_56018_56019_56020_56021_56022_56023_56024_56025_56026_56027_56028_56029_56030_56031_56032_56033_56034_56035_56036_56037_56038_56039_56040_56041_56042_56043_56044_56045_56046_56047_56048_56049_56050_56051_56052_56053_56054_56055_56056_56057_56058_56059_56060_56061_56062_56063_56064_56065_56066_56067_56068_56069_56070_56071_56072_56073_56074_56075_56076_56077_56078_56079_56080_56081_56082_56083_56084_56085_56086_56087_56088_56089_56090_56091_56092_56093_56094_56095_56096_56097_56098_56099_56100_56101_56102_56103_56104_56105_56106_56107_56108_56109_56110_56111_56112_56113_56114_56115_56116_56117_56118_56119_56120_56121_56122_56123_56124_56125_56126_56127_56128_56129_56130_56131_56132_56133_56134_56135_56136_56137_56138_56139_56140_56141_56142_56143_56144_56145_56146_56147_56148_56149_56150_56151_56152_56153_56154_56155_56156_56157_56158_56159_56160_56161_56162_56163_56164_56165_56166_56167_56168_56169_56170_56171_56172_56173_56174_56175_56176_56177_56178_56179_56180_56181_56182_56183_56184_56185_56186_56187_56188_56189_56190_56191_56192_56193_56194_56195_56196_56197_56198_56199_56200_56201_56202_56203_56204_56205_56206_56207_56208_56209_56210_56211_56212_56213_56214_56215_56216_56217_56218_56219_56220_56221_56222_56223_56224_56225_56226_56227_56228_56229_56230_56231_56232_56233_56234_56235_56236_56237_56238_56239_56240_56241_56242_56243_56244_56245_56246_56247_56248_56249_56250_56251_56252_56253_56254_56255_56256_56257_56258_56259_56260_56261_56262_56263_56264_56265_56266_56267_56268_56269_56270_56271_56272_56273_56274_56275_56276_56277_56278_56279_56280_56281_56282_56283_56284_56285_56286_56287_56288_56289_56290_56291_56292_56293_56294_56295_56296_56297_56298_56299_56300_56301_56302_56303_56304_56305_56306_56307_56308_56309_56310_56311_56312_56313_56314_56315_56316_56317_56318_56319_56320_56321_56322_56323_56324_56325_56326_56327_56328_56329_56330_56331_56332_56333_56334_56335_56336_56337_56338_56339_56340_56341_56342_56343_56344_56345_56346_56347_56348_56349_56350_56351_56352_56353_56354_56355_56356_56357_56358_56359_56360_56361_56362_56363_56364_56365_56366_56367_56368_56369_56370_56371_56372_56373_56374_56375_56376_56377_56378_56379_56380_56381_56382_56383_56384_56385_56386_56387_56388_56389_56390_56391_56392_56393_56394_56395_56396_56397_56398_56399_56400_56401_56402_56403_56404_56405_56406_56407_56408_56409_56410_56411_56412_56413_56414_56415_56416_56417_56418_56419_56420_56421_56422_56423_56424_56425_56426_56427_56428_56429_56430_56431_56432_56433_56434_56435_56436_56437_56438_56439_56440_56441_56442_56443_56444_56445_56446_56447_56448_56449_56450_56451_56452_56453_56454_56455_56456_56457_56458_56459_56460_56461_56462_56463_56464_56465_56466_56467_56468_56469_56470_56471_56472_56473_56474_56475_56476_56477_56478_56479_56480_56481_56482_56483_56484_56485_56486_56487_56488_56489_56490_56491_56492_56493_56494_56495_56496_56497_56498_56499_56500_56501_56502_56503_56504_56505_56506_56507_56508_56509_56510_56511_56512_56513_56514_56515_56516_56517_56518_56519_56520_56521_56522_56523_56524_56525_56526_56527_56528_56529_56530_56531_56532_56533_56534_56535_56536_56537_56538_56539_56540_56541_56542_56543_56544_56545_56546_56547_56548_56549_56550_56551_56552_56553_56554_56555_56556_56557_56558_56559_56560_56561_56562_56563_56564_56565_56566_56567_56568_56569_56570_56571_56572_56573_56574_56575_56576_56577_56578_56579_56580_56581_56582_56583_56584_56585_56586_56587_56588_56589_56590_56591_56592_56593_56594_56595_56596_56597_56598_56599_56600_56601_56602_56603_56604_56605_56606_56607_56608_56609_56610_56611_56612_56613_56614_56615_56616_56617_56618_56619_56620_56621_56622_56623_56624_56625_56626_56627_56628_56629_56630_56631_56632_56633_56634_56635_56636_56637_56638_56639_56640_56641_56642_56643_56644_56645_56646_56647_56648_56649_56650_56651_56652_56653_56654_56655_56656_56657_56658_56659_56660_56661_56662_56663_56664_56665_56666_56667_56668_56669_56670_56671_56672_56673_56674_56675_56676_56677_56678_56679_56680_56681_56682_56683_56684_56685_56686_56687_56688_56689_56690_56691_56692_56693_56694_56695_56696_56697_56698_56699_56700_56701_56702_56703_56704_56705_56706_56707_56708_56709_56710_56711_56712_56713_56714_56715_56716_56717_56718_56719_56720_56721_56722_56723_56724_56725_56726_56727_56728_56729_56730_56731_56732_56733_56734_56735_56736_56737_56738_56739_56740_56741_56742_56743_56744_56745_56746_56747_56748_56749_56750_56751_56752_56753_56754_56755_56756_56757_56758_56759_56760_56761_56762_56763_56764_56765_56766_56767_56768_56769_56770_56771_56772_56773_56774_56775_56776_56777_56778_56779_56780_56781_56782_56783_56784_56785_56786_56787_56788_56789_56790_56791_56792_56793_56794_56795_56796_56797_56798_56799_56800_56801_56802_56803_56804_56805_56806_56807_56808_56809_56810_56811_56812_56813_56814_56815_56816_56817_56818_56819_56820_56821_56822_56823_56824_56825_56826_56827_56828_56829_56830_56831_56832_56833_56834_56835_56836_56837_56838_56839_56840_56841_56842_56843_56844_56845_56846_56847_56848_56849_56850_56851_56852_56853_56854_56855_56856_56857_56858_56859_56860_56861_56862_56863_56864_56865_56866_56867_56868_56869_56870_56871_56872_56873_56874_56875_56876_56877_56878_56879_56880_56881_56882_56883_56884_56885_56886_56887_56888_56889_56890_56891_56892_56893_56894_56895_56896_56897_56898_56899_56900_56901_56902_56903_56904_56905_56906_56907_56908_56909_56910_56911_56912_56913_56914_56915_56916_56917_56918_56919_56920_56921_56922_56923_56924_56925_56926_56927_56928_56929_56930_56931_56932_56933_56934_56935_56936_56937_56938_56939_56940_56941_56942_56943_56944_56945_56946_56947_56948_56949_56950_56951_56952_56953_56954_56955_56956_56957_56958_56959_56960_56961_56962_56963_56964_56965_56966_56967_56968_56969_56970_56971_56972_56973_56974_56975_56976_56977_56978_56979_56980_56981_56982_56983_56984_56985_56986_56987_56988_56989_56990_56991_56992_56993_56994_56995_56996_56997_56998_56999_57000_57001_57002_57003_57004_57005_57006_57007_57008_57009_57010_57011_57012_57013_57014_57015_57016_57017_57018_57019_57020_57021_57022_57023_57024_57025_57026_57027_57028_57029_57030_57031_57032_57033_57034_57035_57036_57037_57038_57039_57040_57041_57042_57043_57044_57045_57046_57047_57048_57049_57050_57051_57052_57053_57054_57055_57056_57057_57058_57059_57060_57061_57062_57063_57064_57065_57066_57067_57068_57069_57070_57071_57072_57073_57074_57075_57076_57077_57078_57079_57080_57081_57082_57083_57084_57085_57086_57087_57088_57089_57090_57091_57092_57093_57094_57095_57096_57097_57098_57099_57100_57101_57102_57103_57104_57105_57106_57107_57108_57109_57110_57111_57112_57113_57114_57115_57116_57117_57118_57119_57120_57121_57122_57123_57124_57125_57126_57127_57128_57129_57130_57131_57132_57133_57134_57135_57136_57137_57138_57139_57140_57141_57142_57143_57144_57145_57146_57147_57148_57149_57150_57151_57152_57153_57154_57155_57156_57157_57158_57159_57160_57161_57162_57163_57164_57165_57166_57167_57168_57169_57170_57171_57172_57173_57174_57175_57176_57177_57178_57179_57180_57181_57182_57183_57184_57185_57186_57187_57188_57189_57190_57191_57192_57193_57194_57195_57196_57197_57198_57199_57200_57201_57202_57203_57204_57205_57206_57207_57208_57209_57210_57211_57212_57213_57214_57215_57216_57217_57218_57219_57220_57221_57222_57223_57224_57225_57226_57227_57228_57229_57230_57231_57232_57233_57234_57235_57236_57237_57238_57239_57240_57241_57242_57243_57244_57245_57246_57247_57248_57249_57250_57251_57252_57253_57254_57255_57256_57257_57258_57259_57260_57261_57262_57263_57264_57265_57266_57267_57268_57269_57270_57271_57272_57273_57274_57275_57276_57277_57278_57279_57280_57281_57282_57283_57284_57285_57286_57287_57288_57289_57290_57291_57292_57293_57294_57295_57296_57297_57298_57299_57300_57301_57302_57303_57304_57305_57306_57307_57308_57309_57310_57311_57312_57313_57314_57315_57316_57317_57318_57319_57320_57321_57322_57323_57324_57325_57326_57327_57328_57329_57330_57331_57332_57333_57334_57335_57336_57337_57338_57339_57340_57341_57342_57343_57344_57345_57346_57347_57348_57349_57350_57351_57352_57353_57354_57355_57356_57357_57358_57359_57360_57361_57362_57363_57364_57365_57366_57367_57368_57369_57370_57371_57372_57373_57374_57375_57376_57377_57378_57379_57380_57381_57382_57383_57384_57385_57386_57387_57388_57389_57390_57391_57392_57393_57394_57395_57396_57397_57398_57399_57400_57401_57402_57403_57404_57405_57406_57407_57408_57409_57410_57411_57412_57413_57414_57415_57416_57417_57418_57419_57420_57421_57422_57423_57424_57425_57426_57427_57428_57429_57430_57431_57432_57433_57434_57435_57436_57437_57438_57439_57440_57441_57442_57443_57444_57445_57446_57447_57448_57449_57450_57451_57452_57453_57454_57455_57456_57457_57458_57459_57460_57461_57462_57463_57464_57465_57466_57467_57468_57469_57470_57471_57472_57473_57474_57475_57476_57477_57478_57479_57480_57481_57482_57483_57484_57485_57486_57487_57488_57489_57490_57491_57492_57493_57494_57495_57496_57497_57498_57499_57500_57501_57502_57503_57504_57505_57506_57507_57508_57509_57510_57511_57512_57513_57514_57515_57516_57517_57518_57519_57520_57521_57522_57523_57524_57525_57526_57527_57528_57529_57530_57531_57532_57533_57534_57535_57536_57537_57538_57539_57540_57541_57542_57543_57544_57545_57546_57547_57548_57549_57550_57551_57552_57553_57554_57555_57556_57557_57558_57559_57560_57561_57562_57563_57564_57565_57566_57567_57568_57569_57570_57571_57572_57573_57574_57575_57576_57577_57578_57579_57580_57581_57582_57583_57584_57585_57586_57587_57588_57589_57590_57591_57592_57593_57594_57595_57596_57597_57598_57599_57600_57601_57602_57603_57604_57605_57606_57607_57608_57609_57610_57611_57612_57613_57614_57615_57616_57617_57618_57619_57620_57621_57622_57623_57624_57625_57626_57627_57628_57629_57630_57631_57632_57633_57634_57635_57636_57637_57638_57639_57640_57641_57642_57643_57644_57645_57646_57647_57648_57649_57650_57651_57652_57653_57654_57655_57656_57657_57658_57659_57660_57661_57662_57663_57664_57665_57666_57667_57668_57669_57670_57671_57672_57673_57674_57675_57676_57677_57678_57679_57680_57681_57682_57683_57684_57685_57686_57687_57688_57689_57690_57691_57692_57693_57694_57695_57696_57697_57698_57699_57700_57701_57702_57703_57704_57705_57706_57707_57708_57709_57710_57711_57712_57713_57714_57715_57716_57717_57718_57719_57720_57721_57722_57723_57724_57725_57726_57727_57728_57729_57730_57731_57732_57733_57734_57735_57736_57737_57738_57739_57740_57741_57742_57743_57744_57745_57746_57747_57748_57749_57750_57751_57752_57753_57754_57755_57756_57757_57758_57759_57760_57761_57762_57763_57764_57765_57766_57767_57768_57769_57770_57771_57772_57773_57774_57775_57776_57777_57778_57779_57780_57781_57782_57783_57784_57785_57786_57787_57788_57789_57790_57791_57792_57793_57794_57795_57796_57797_57798_57799_57800_57801_57802_57803_57804_57805_57806_57807_57808_57809_57810_57811_57812_57813_57814_57815_57816_57817_57818_57819_57820_57821_57822_57823_57824_57825_57826_57827_57828_57829_57830_57831_57832_57833_57834_57835_57836_57837_57838_57839_57840_57841_57842_57843_57844_57845_57846_57847_57848_57849_57850_57851_57852_57853_57854_57855_57856_57857_57858_57859_57860_57861_57862_57863_57864_57865_57866_57867_57868_57869_57870_57871_57872_57873_57874_57875_57876_57877_57878_57879_57880_57881_57882_57883_57884_57885_57886_57887_57888_57889_57890_57891_57892_57893_57894_57895_57896_57897_57898_57899_57900_57901_57902_57903_57904_57905_57906_57907_57908_57909_57910_57911_57912_57913_57914_57915_57916_57917_57918_57919_57920_57921_57922_57923_57924_57925_57926_57927_57928_57929_57930_57931_57932_57933_57934_57935_57936_57937_57938_57939_57940_57941_57942_57943_57944_57945_57946_57947_57948_57949_57950_57951_57952_57953_57954_57955_57956_57957_57958_57959_57960_57961_57962_57963_57964_57965_57966_57967_57968_57969_57970_57971_57972_57973_57974_57975_57976_57977_57978_57979_57980_57981_57982_57983_57984_57985_57986_57987_57988_57989_57990_57991_57992_57993_57994_57995_57996_57997_57998_57999_58000_58001_58002_58003_58004_58005_58006_58007_58008_58009_58010_58011_58012_58013_58014_58015_58016_58017_58018_58019_58020_58021_58022_58023_58024_58025_58026_58027_58028_58029_58030_58031_58032_58033_58034_58035_58036_58037_58038_58039_58040_58041_58042_58043_58044_58045_58046_58047_58048_58049_58050_58051_58052_58053_58054_58055_58056_58057_58058_58059_58060_58061_58062_58063_58064_58065_58066_58067_58068_58069_58070_58071_58072_58073_58074_58075_58076_58077_58078_58079_58080_58081_58082_58083_58084_58085_58086_58087_58088_58089_58090_58091_58092_58093_58094_58095_58096_58097_58098_58099_58100_58101_58102_58103_58104_58105_58106_58107_58108_58109_58110_58111_58112_58113_58114_58115_58116_58117_58118_58119_58120_58121_58122_58123_58124_58125_58126_58127_58128_58129_58130_58131_58132_58133_58134_58135_58136_58137_58138_58139_58140_58141_58142_58143_58144_58145_58146_58147_58148_58149_58150_58151_58152_58153_58154_58155_58156_58157_58158_58159_58160_58161_58162_58163_58164_58165_58166_58167_58168_58169_58170_58171_58172_58173_58174_58175_58176_58177_58178_58179_58180_58181_58182_58183_58184_58185_58186_58187_58188_58189_58190_58191_58192_58193_58194_58195_58196_58197_58198_58199_58200_58201_58202_58203_58204_58205_58206_58207_58208_58209_58210_58211_58212_58213_58214_58215_58216_58217_58218_58219_58220_58221_58222_58223_58224_58225_58226_58227_58228_58229_58230_58231_58232_58233_58234_58235_58236_58237_58238_58239_58240_58241_58242_58243_58244_58245_58246_58247_58248_58249_58250_58251_58252_58253_58254_58255_58256_58257_58258_58259_58260_58261_58262_58263_58264_58265_58266_58267_58268_58269_58270_58271_58272_58273_58274_58275_58276_58277_58278_58279_58280_58281_58282_58283_58284_58285_58286_58287_58288_58289_58290_58291_58292_58293_58294_58295_58296_58297_58298_58299_58300_58301_58302_58303_58304_58305_58306_58307_58308_58309_58310_58311_58312_58313_58314_58315_58316_58317_58318_58319_58320_58321_58322_58323_58324_58325_58326_58327_58328_58329_58330_58331_58332_58333_58334_58335_58336_58337_58338_58339_58340_58341_58342_58343_58344_58345_58346_58347_58348_58349_58350_58351_58352_58353_58354_58355_58356_58357_58358_58359_58360_58361_58362_58363_58364_58365_58366_58367_58368_58369_58370_58371_58372_58373_58374_58375_58376_58377_58378_58379_58380_58381_58382_58383_58384_58385_58386_58387_58388_58389_58390_58391_58392_58393_58394_58395_58396_58397_58398_58399_58400_58401_58402_58403_58404_58405_58406_58407_58408_58409_58410_58411_58412_58413_58414_58415_58416_58417_58418_58419_58420_58421_58422_58423_58424_58425_58426_58427_58428_58429_58430_58431_58432_58433_58434_58435_58436_58437_58438_58439_58440_58441_58442_58443_58444_58445_58446_58447_58448_58449_58450_58451_58452_58453_58454_58455_58456_58457_58458_58459_58460_58461_58462_58463_58464_58465_58466_58467_58468_58469_58470_58471_58472_58473_58474_58475_58476_58477_58478_58479_58480_58481_58482_58483_58484_58485_58486_58487_58488_58489_58490_58491_58492_58493_58494_58495_58496_58497_58498_58499_58500_58501_58502_58503_58504_58505_58506_58507_58508_58509_58510_58511_58512_58513_58514_58515_58516_58517_58518_58519_58520_58521_58522_58523_58524_58525_58526_58527_58528_58529_58530_58531_58532_58533_58534_58535_58536_58537_58538_58539_58540_58541_58542_58543_58544_58545_58546_58547_58548_58549_58550_58551_58552_58553_58554_58555_58556_58557_58558_58559_58560_58561_58562_58563_58564_58565_58566_58567_58568_58569_58570_58571_58572_58573_58574_58575_58576_58577_58578_58579_58580_58581_58582_58583_58584_58585_58586_58587_58588_58589_58590_58591_58592_58593_58594_58595_58596_58597_58598_58599_58600_58601_58602_58603_58604_58605_58606_58607_58608_58609_58610_58611_58612_58613_58614_58615_58616_58617_58618_58619_58620_58621_58622_58623_58624_58625_58626_58627_58628_58629_58630_58631_58632_58633_58634_58635_58636_58637_58638_58639_58640_58641_58642_58643_58644_58645_58646_58647_58648_58649_58650_58651_58652_58653_58654_58655_58656_58657_58658_58659_58660_58661_58662_58663_58664_58665_58666_58667_58668_58669_58670_58671_58672_58673_58674_58675_58676_58677_58678_58679_58680_58681_58682_58683_58684_58685_58686_58687_58688_58689_58690_58691_58692_58693_58694_58695_58696_58697_58698_58699_58700_58701_58702_58703_58704_58705_58706_58707_58708_58709_58710_58711_58712_58713_58714_58715_58716_58717_58718_58719_58720_58721_58722_58723_58724_58725_58726_58727_58728_58729_58730_58731_58732_58733_58734_58735_58736_58737_58738_58739_58740_58741_58742_58743_58744_58745_58746_58747_58748_58749_58750_58751_58752_58753_58754_58755_58756_58757_58758_58759_58760_58761_58762_58763_58764_58765_58766_58767_58768_58769_58770_58771_58772_58773_58774_58775_58776_58777_58778_58779_58780_58781_58782_58783_58784_58785_58786_58787_58788_58789_58790_58791_58792_58793_58794_58795_58796_58797_58798_58799_58800_58801_58802_58803_58804_58805_58806_58807_58808_58809_58810_58811_58812_58813_58814_58815_58816_58817_58818_58819_58820_58821_58822_58823_58824_58825_58826_58827_58828_58829_58830_58831_58832_58833_58834_58835_58836_58837_58838_58839_58840_58841_58842_58843_58844_58845_58846_58847_58848_58849_58850_58851_58852_58853_58854_58855_58856_58857_58858_58859_58860_58861_58862_58863_58864_58865_58866_58867_58868_58869_58870_58871_58872_58873_58874_58875_58876_58877_58878_58879_58880_58881_58882_58883_58884_58885_58886_58887_58888_58889_58890_58891_58892_58893_58894_58895_58896_58897_58898_58899_58900_58901_58902_58903_58904_58905_58906_58907_58908_58909_58910_58911_58912_58913_58914_58915_58916_58917_58918_58919_58920_58921_58922_58923_58924_58925_58926_58927_58928_58929_58930_58931_58932_58933_58934_58935_58936_58937_58938_58939_58940_58941_58942_58943_58944_58945_58946_58947_58948_58949_58950_58951_58952_58953_58954_58955_58956_58957_58958_58959_58960_58961_58962_58963_58964_58965_58966_58967_58968_58969_58970_58971_58972_58973_58974_58975_58976_58977_58978_58979_58980_58981_58982_58983_58984_58985_58986_58987_58988_58989_58990_58991_58992_58993_58994_58995_58996_58997_58998_58999_59000_59001_59002_59003_59004_59005_59006_59007_59008_59009_59010_59011_59012_59013_59014_59015_59016_59017_59018_59019_59020_59021_59022_59023_59024_59025_59026_59027_59028_59029_59030_59031_59032_59033_59034_59035_59036_59037_59038_59039_59040_59041_59042_59043_59044_59045_59046_59047_59048_59049_59050_59051_59052_59053_59054_59055_59056_59057_59058_59059_59060_59061_59062_59063_59064_59065_59066_59067_59068_59069_59070_59071_59072_59073_59074_59075_59076_59077_59078_59079_59080_59081_59082_59083_59084_59085_59086_59087_59088_59089_59090_59091_59092_59093_59094_59095_59096_59097_59098_59099_59100_59101_59102_59103_59104_59105_59106_59107_59108_59109_59110_59111_59112_59113_59114_59115_59116_59117_59118_59119_59120_59121_59122_59123_59124_59125_59126_59127_59128_59129_59130_59131_59132_59133_59134_59135_59136_59137_59138_59139_59140_59141_59142_59143_59144_59145_59146_59147_59148_59149_59150_59151_59152_59153_59154_59155_59156_59157_59158_59159_59160_59161_59162_59163_59164_59165_59166_59167_59168_59169_59170_59171_59172_59173_59174_59175_59176_59177_59178_59179_59180_59181_59182_59183_59184_59185_59186_59187_59188_59189_59190_59191_59192_59193_59194_59195_59196_59197_59198_59199_59200_59201_59202_59203_59204_59205_59206_59207_59208_59209_59210_59211_59212_59213_59214_59215_59216_59217_59218_59219_59220_59221_59222_59223_59224_59225_59226_59227_59228_59229_59230_59231_59232_59233_59234_59235_59236_59237_59238_59239_59240_59241_59242_59243_59244_59245_59246_59247_59248_59249_59250_59251_59252_59253_59254_59255_59256_59257_59258_59259_59260_59261_59262_59263_59264_59265_59266_59267_59268_59269_59270_59271_59272_59273_59274_59275_59276_59277_59278_59279_59280_59281_59282_59283_59284_59285_59286_59287_59288_59289_59290_59291_59292_59293_59294_59295_59296_59297_59298_59299_59300_59301_59302_59303_59304_59305_59306_59307_59308_59309_59310_59311_59312_59313_59314_59315_59316_59317_59318_59319_59320_59321_59322_59323_59324_59325_59326_59327_59328_59329_59330_59331_59332_59333_59334_59335_59336_59337_59338_59339_59340_59341_59342_59343_59344_59345_59346_59347_59348_59349_59350_59351_59352_59353_59354_59355_59356_59357_59358_59359_59360_59361_59362_59363_59364_59365_59366_59367_59368_59369_59370_59371_59372_59373_59374_59375_59376_59377_59378_59379_59380_59381_59382_59383_59384_59385_59386_59387_59388_59389_59390_59391_59392_59393_59394_59395_59396_59397_59398_59399_59400_59401_59402_59403_59404_59405_59406_59407_59408_59409_59410_59411_59412_59413_59414_59415_59416_59417_59418_59419_59420_59421_59422_59423_59424_59425_59426_59427_59428_59429_59430_59431_59432_59433_59434_59435_59436_59437_59438_59439_59440_59441_59442_59443_59444_59445_59446_59447_59448_59449_59450_59451_59452_59453_59454_59455_59456_59457_59458_59459_59460_59461_59462_59463_59464_59465_59466_59467_59468_59469_59470_59471_59472_59473_59474_59475_59476_59477_59478_59479_59480_59481_59482_59483_59484_59485_59486_59487_59488_59489_59490_59491_59492_59493_59494_59495_59496_59497_59498_59499_59500_59501_59502_59503_59504_59505_59506_59507_59508_59509_59510_59511_59512_59513_59514_59515_59516_59517_59518_59519_59520_59521_59522_59523_59524_59525_59526_59527_59528_59529_59530_59531_59532_59533_59534_59535_59536_59537_59538_59539_59540_59541_59542_59543_59544_59545_59546_59547_59548_59549_59550_59551_59552_59553_59554_59555_59556_59557_59558_59559_59560_59561_59562_59563_59564_59565_59566_59567_59568_59569_59570_59571_59572_59573_59574_59575_59576_59577_59578_59579_59580_59581_59582_59583_59584_59585_59586_59587_59588_59589_59590_59591_59592_59593_59594_59595_59596_59597_59598_59599_59600_59601_59602_59603_59604_59605_59606_59607_59608_59609_59610_59611_59612_59613_59614_59615_59616_59617_59618_59619_59620_59621_59622_59623_59624_59625_59626_59627_59628_59629_59630_59631_59632_59633_59634_59635_59636_59637_59638_59639_59640_59641_59642_59643_59644_59645_59646_59647_59648_59649_59650_59651_59652_59653_59654_59655_59656_59657_59658_59659_59660_59661_59662_59663_59664_59665_59666_59667_59668_59669_59670_59671_59672_59673_59674_59675_59676_59677_59678_59679_59680_59681_59682_59683_59684_59685_59686_59687_59688_59689_59690_59691_59692_59693_59694_59695_59696_59697_59698_59699_59700_59701_59702_59703_59704_59705_59706_59707_59708_59709_59710_59711_59712_59713_59714_59715_59716_59717_59718_59719_59720_59721_59722_59723_59724_59725_59726_59727_59728_59729_59730_59731_59732_59733_59734_59735_59736_59737_59738_59739_59740_59741_59742_59743_59744_59745_59746_59747_59748_59749_59750_59751_59752_59753_59754_59755_59756_59757_59758_59759_59760_59761_59762_59763_59764_59765_59766_59767_59768_59769_59770_59771_59772_59773_59774_59775_59776_59777_59778_59779_59780_59781_59782_59783_59784_59785_59786_59787_59788_59789_59790_59791_59792_59793_59794_59795_59796_59797_59798_59799_59800_59801_59802_59803_59804_59805_59806_59807_59808_59809_59810_59811_59812_59813_59814_59815_59816_59817_59818_59819_59820_59821_59822_59823_59824_59825_59826_59827_59828_59829_59830_59831_59832_59833_59834_59835_59836_59837_59838_59839_59840_59841_59842_59843_59844_59845_59846_59847_59848_59849_59850_59851_59852_59853_59854_59855_59856_59857_59858_59859_59860_59861_59862_59863_59864_59865_59866_59867_59868_59869_59870_59871_59872_59873_59874_59875_59876_59877_59878_59879_59880_59881_59882_59883_59884_59885_59886_59887_59888_59889_59890_59891_59892_59893_59894_59895_59896_59897_59898_59899_59900_59901_59902_59903_59904_59905_59906_59907_59908_59909_59910_59911_59912_59913_59914_59915_59916_59917_59918_59919_59920_59921_59922_59923_59924_59925_59926_59927_59928_59929_59930_59931_59932_59933_59934_59935_59936_59937_59938_59939_59940_59941_59942_59943_59944_59945_59946_59947_59948_59949_59950_59951_59952_59953_59954_59955_59956_59957_59958_59959_59960_59961_59962_59963_59964_59965_59966_59967_59968_59969_59970_59971_59972_59973_59974_59975_59976_59977_59978_59979_59980_59981_59982_59983_59984_59985_59986_59987_59988_59989_59990_59991_59992_59993_59994_59995_59996_59997_59998_59999_60000_60001_60002_60003_60004_60005_60006_60007_60008_60009_60010_60011_60012_60013_60014_60015_60016_60017_60018_60019_60020_60021_60022_60023_60024_60025_60026_60027_60028_60029_60030_60031_60032_60033_60034_60035_60036_60037_60038_60039_60040_60041_60042_60043_60044_60045_60046_60047_60048_60049_60050_60051_60052_60053_60054_60055_60056_60057_60058_60059_60060_60061_60062_60063_60064_60065_60066_60067_60068_60069_60070_60071_60072_60073_60074_60075_60076_60077_60078_60079_60080_60081_60082_60083_60084_60085_60086_60087_60088_60089_60090_60091_60092_60093_60094_60095_60096_60097_60098_60099_60100_60101_60102_60103_60104_60105_60106_60107_60108_60109_60110_60111_60112_60113_60114_60115_60116_60117_60118_60119_60120_60121_60122_60123_60124_60125_60126_60127_60128_60129_60130_60131_60132_60133_60134_60135_60136_60137_60138_60139_60140_60141_60142_60143_60144_60145_60146_60147_60148_60149_60150_60151_60152_60153_60154_60155_60156_60157_60158_60159_60160_60161_60162_60163_60164_60165_60166_60167_60168_60169_60170_60171_60172_60173_60174_60175_60176_60177_60178_60179_60180_60181_60182_60183_60184_60185_60186_60187_60188_60189_60190_60191_60192_60193_60194_60195_60196_60197_60198_60199_60200_60201_60202_60203_60204_60205_60206_60207_60208_60209_60210_60211_60212_60213_60214_60215_60216_60217_60218_60219_60220_60221_60222_60223_60224_60225_60226_60227_60228_60229_60230_60231_60232_60233_60234_60235_60236_60237_60238_60239_60240_60241_60242_60243_60244_60245_60246_60247_60248_60249_60250_60251_60252_60253_60254_60255_60256_60257_60258_60259_60260_60261_60262_60263_60264_60265_60266_60267_60268_60269_60270_60271_60272_60273_60274_60275_60276_60277_60278_60279_60280_60281_60282_60283_60284_60285_60286_60287_60288_60289_60290_60291_60292_60293_60294_60295_60296_60297_60298_60299_60300_60301_60302_60303_60304_60305_60306_60307_60308_60309_60310_60311_60312_60313_60314_60315_60316_60317_60318_60319_60320_60321_60322_60323_60324_60325_60326_60327_60328_60329_60330_60331_60332_60333_60334_60335_60336_60337_60338_60339_60340_60341_60342_60343_60344_60345_60346_60347_60348_60349_60350_60351_60352_60353_60354_60355_60356_60357_60358_60359_60360_60361_60362_60363_60364_60365_60366_60367_60368_60369_60370_60371_60372_60373_60374_60375_60376_60377_60378_60379_60380_60381_60382_60383_60384_60385_60386_60387_60388_60389_60390_60391_60392_60393_60394_60395_60396_60397_60398_60399_60400_60401_60402_60403_60404_60405_60406_60407_60408_60409_60410_60411_60412_60413_60414_60415_60416_60417_60418_60419_60420_60421_60422_60423_60424_60425_60426_60427_60428_60429_60430_60431_60432_60433_60434_60435_60436_60437_60438_60439_60440_60441_60442_60443_60444_60445_60446_60447_60448_60449_60450_60451_60452_60453_60454_60455_60456_60457_60458_60459_60460_60461_60462_60463_60464_60465_60466_60467_60468_60469_60470_60471_60472_60473_60474_60475_60476_60477_60478_60479_60480_60481_60482_60483_60484_60485_60486_60487_60488_60489_60490_60491_60492_60493_60494_60495_60496_60497_60498_60499_60500_60501_60502_60503_60504_60505_60506_60507_60508_60509_60510_60511_60512_60513_60514_60515_60516_60517_60518_60519_60520_60521_60522_60523_60524_60525_60526_60527_60528_60529_60530_60531_60532_60533_60534_60535_60536_60537_60538_60539_60540_60541_60542_60543_60544_60545_60546_60547_60548_60549_60550_60551_60552_60553_60554_60555_60556_60557_60558_60559_60560_60561_60562_60563_60564_60565_60566_60567_60568_60569_60570_60571_60572_60573_60574_60575_60576_60577_60578_60579_60580_60581_60582_60583_60584_60585_60586_60587_60588_60589_60590_60591_60592_60593_60594_60595_60596_60597_60598_60599_60600_60601_60602_60603_60604_60605_60606_60607_60608_60609_60610_60611_60612_60613_60614_60615_60616_60617_60618_60619_60620_60621_60622_60623_60624_60625_60626_60627_60628_60629_60630_60631_60632_60633_60634_60635_60636_60637_60638_60639_60640_60641_60642_60643_60644_60645_60646_60647_60648_60649_60650_60651_60652_60653_60654_60655_60656_60657_60658_60659_60660_60661_60662_60663_60664_60665_60666_60667_60668_60669_60670_60671_60672_60673_60674_60675_60676_60677_60678_60679_60680_60681_60682_60683_60684_60685_60686_60687_60688_60689_60690_60691_60692_60693_60694_60695_60696_60697_60698_60699_60700_60701_60702_60703_60704_60705_60706_60707_60708_60709_60710_60711_60712_60713_60714_60715_60716_60717_60718_60719_60720_60721_60722_60723_60724_60725_60726_60727_60728_60729_60730_60731_60732_60733_60734_60735_60736_60737_60738_60739_60740_60741_60742_60743_60744_60745_60746_60747_60748_60749_60750_60751_60752_60753_60754_60755_60756_60757_60758_60759_60760_60761_60762_60763_60764_60765_60766_60767_60768_60769_60770_60771_60772_60773_60774_60775_60776_60777_60778_60779_60780_60781_60782_60783_60784_60785_60786_60787_60788_60789_60790_60791_60792_60793_60794_60795_60796_60797_60798_60799_60800_60801_60802_60803_60804_60805_60806_60807_60808_60809_60810_60811_60812_60813_60814_60815_60816_60817_60818_60819_60820_60821_60822_60823_60824_60825_60826_60827_60828_60829_60830_60831_60832_60833_60834_60835_60836_60837_60838_60839_60840_60841_60842_60843_60844_60845_60846_60847_60848_60849_60850_60851_60852_60853_60854_60855_60856_60857_60858_60859_60860_60861_60862_60863_60864_60865_60866_60867_60868_60869_60870_60871_60872_60873_60874_60875_60876_60877_60878_60879_60880_60881_60882_60883_60884_60885_60886_60887_60888_60889_60890_60891_60892_60893_60894_60895_60896_60897_60898_60899_60900_60901_60902_60903_60904_60905_60906_60907_60908_60909_60910_60911_60912_60913_60914_60915_60916_60917_60918_60919_60920_60921_60922_60923_60924_60925_60926_60927_60928_60929_60930_60931_60932_60933_60934_60935_60936_60937_60938_60939_60940_60941_60942_60943_60944_60945_60946_60947_60948_60949_60950_60951_60952_60953_60954_60955_60956_60957_60958_60959_60960_60961_60962_60963_60964_60965_60966_60967_60968_60969_60970_60971_60972_60973_60974_60975_60976_60977_60978_60979_60980_60981_60982_60983_60984_60985_60986_60987_60988_60989_60990_60991_60992_60993_60994_60995_60996_60997_60998_60999_61000_61001_61002_61003_61004_61005_61006_61007_61008_61009_61010_61011_61012_61013_61014_61015_61016_61017_61018_61019_61020_61021_61022_61023_61024_61025_61026_61027_61028_61029_61030_61031_61032_61033_61034_61035_61036_61037_61038_61039_61040_61041_61042_61043_61044_61045_61046_61047_61048_61049_61050_61051_61052_61053_61054_61055_61056_61057_61058_61059_61060_61061_61062_61063_61064_61065_61066_61067_61068_61069_61070_61071_61072_61073_61074_61075_61076_61077_61078_61079_61080_61081_61082_61083_61084_61085_61086_61087_61088_61089_61090_61091_61092_61093_61094_61095_61096_61097_61098_61099_61100_61101_61102_61103_61104_61105_61106_61107_61108_61109_61110_61111_61112_61113_61114_61115_61116_61117_61118_61119_61120_61121_61122_61123_61124_61125_61126_61127_61128_61129_61130_61131_61132_61133_61134_61135_61136_61137_61138_61139_61140_61141_61142_61143_61144_61145_61146_61147_61148_61149_61150_61151_61152_61153_61154_61155_61156_61157_61158_61159_61160_61161_61162_61163_61164_61165_61166_61167_61168_61169_61170_61171_61172_61173_61174_61175_61176_61177_61178_61179_61180_61181_61182_61183_61184_61185_61186_61187_61188_61189_61190_61191_61192_61193_61194_61195_61196_61197_61198_61199_61200_61201_61202_61203_61204_61205_61206_61207_61208_61209_61210_61211_61212_61213_61214_61215_61216_61217_61218_61219_61220_61221_61222_61223_61224_61225_61226_61227_61228_61229_61230_61231_61232_61233_61234_61235_61236_61237_61238_61239_61240_61241_61242_61243_61244_61245_61246_61247_61248_61249_61250_61251_61252_61253_61254_61255_61256_61257_61258_61259_61260_61261_61262_61263_61264_61265_61266_61267_61268_61269_61270_61271_61272_61273_61274_61275_61276_61277_61278_61279_61280_61281_61282_61283_61284_61285_61286_61287_61288_61289_61290_61291_61292_61293_61294_61295_61296_61297_61298_61299_61300_61301_61302_61303_61304_61305_61306_61307_61308_61309_61310_61311_61312_61313_61314_61315_61316_61317_61318_61319_61320_61321_61322_61323_61324_61325_61326_61327_61328_61329_61330_61331_61332_61333_61334_61335_61336_61337_61338_61339_61340_61341_61342_61343_61344_61345_61346_61347_61348_61349_61350_61351_61352_61353_61354_61355_61356_61357_61358_61359_61360_61361_61362_61363_61364_61365_61366_61367_61368_61369_61370_61371_61372_61373_61374_61375_61376_61377_61378_61379_61380_61381_61382_61383_61384_61385_61386_61387_61388_61389_61390_61391_61392_61393_61394_61395_61396_61397_61398_61399_61400_61401_61402_61403_61404_61405_61406_61407_61408_61409_61410_61411_61412_61413_61414_61415_61416_61417_61418_61419_61420_61421_61422_61423_61424_61425_61426_61427_61428_61429_61430_61431_61432_61433_61434_61435_61436_61437_61438_61439_61440_61441_61442_61443_61444_61445_61446_61447_61448_61449_61450_61451_61452_61453_61454_61455_61456_61457_61458_61459_61460_61461_61462_61463_61464_61465_61466_61467_61468_61469_61470_61471_61472_61473_61474_61475_61476_61477_61478_61479_61480_61481_61482_61483_61484_61485_61486_61487_61488_61489_61490_61491_61492_61493_61494_61495_61496_61497_61498_61499_61500_61501_61502_61503_61504_61505_61506_61507_61508_61509_61510_61511_61512_61513_61514_61515_61516_61517_61518_61519_61520_61521_61522_61523_61524_61525_61526_61527_61528_61529_61530_61531_61532_61533_61534_61535_61536_61537_61538_61539_61540_61541_61542_61543_61544_61545_61546_61547_61548_61549_61550_61551_61552_61553_61554_61555_61556_61557_61558_61559_61560_61561_61562_61563_61564_61565_61566_61567_61568_61569_61570_61571_61572_61573_61574_61575_61576_61577_61578_61579_61580_61581_61582_61583_61584_61585_61586_61587_61588_61589_61590_61591_61592_61593_61594_61595_61596_61597_61598_61599_61600_61601_61602_61603_61604_61605_61606_61607_61608_61609_61610_61611_61612_61613_61614_61615_61616_61617_61618_61619_61620_61621_61622_61623_61624_61625_61626_61627_61628_61629_61630_61631_61632_61633_61634_61635_61636_61637_61638_61639_61640_61641_61642_61643_61644_61645_61646_61647_61648_61649_61650_61651_61652_61653_61654_61655_61656_61657_61658_61659_61660_61661_61662_61663_61664_61665_61666_61667_61668_61669_61670_61671_61672_61673_61674_61675_61676_61677_61678_61679_61680_61681_61682_61683_61684_61685_61686_61687_61688_61689_61690_61691_61692_61693_61694_61695_61696_61697_61698_61699_61700_61701_61702_61703_61704_61705_61706_61707_61708_61709_61710_61711_61712_61713_61714_61715_61716_61717_61718_61719_61720_61721_61722_61723_61724_61725_61726_61727_61728_61729_61730_61731_61732_61733_61734_61735_61736_61737_61738_61739_61740_61741_61742_61743_61744_61745_61746_61747_61748_61749_61750_61751_61752_61753_61754_61755_61756_61757_61758_61759_61760_61761_61762_61763_61764_61765_61766_61767_61768_61769_61770_61771_61772_61773_61774_61775_61776_61777_61778_61779_61780_61781_61782_61783_61784_61785_61786_61787_61788_61789_61790_61791_61792_61793_61794_61795_61796_61797_61798_61799_61800_61801_61802_61803_61804_61805_61806_61807_61808_61809_61810_61811_61812_61813_61814_61815_61816_61817_61818_61819_61820_61821_61822_61823_61824_61825_61826_61827_61828_61829_61830_61831_61832_61833_61834_61835_61836_61837_61838_61839_61840_61841_61842_61843_61844_61845_61846_61847_61848_61849_61850_61851_61852_61853_61854_61855_61856_61857_61858_61859_61860_61861_61862_61863_61864_61865_61866_61867_61868_61869_61870_61871_61872_61873_61874_61875_61876_61877_61878_61879_61880_61881_61882_61883_61884_61885_61886_61887_61888_61889_61890_61891_61892_61893_61894_61895_61896_61897_61898_61899_61900_61901_61902_61903_61904_61905_61906_61907_61908_61909_61910_61911_61912_61913_61914_61915_61916_61917_61918_61919_61920_61921_61922_61923_61924_61925_61926_61927_61928_61929_61930_61931_61932_61933_61934_61935_61936_61937_61938_61939_61940_61941_61942_61943_61944_61945_61946_61947_61948_61949_61950_61951_61952_61953_61954_61955_61956_61957_61958_61959_61960_61961_61962_61963_61964_61965_61966_61967_61968_61969_61970_61971_61972_61973_61974_61975_61976_61977_61978_61979_61980_61981_61982_61983_61984_61985_61986_61987_61988_61989_61990_61991_61992_61993_61994_61995_61996_61997_61998_61999_62000_62001_62002_62003_62004_62005_62006_62007_62008_62009_62010_62011_62012_62013_62014_62015_62016_62017_62018_62019_62020_62021_62022_62023_62024_62025_62026_62027_62028_62029_62030_62031_62032_62033_62034_62035_62036_62037_62038_62039_62040_62041_62042_62043_62044_62045_62046_62047_62048_62049_62050_62051_62052_62053_62054_62055_62056_62057_62058_62059_62060_62061_62062_62063_62064_62065_62066_62067_62068_62069_62070_62071_62072_62073_62074_62075_62076_62077_62078_62079_62080_62081_62082_62083_62084_62085_62086_62087_62088_62089_62090_62091_62092_62093_62094_62095_62096_62097_62098_62099_62100_62101_62102_62103_62104_62105_62106_62107_62108_62109_62110_62111_62112_62113_62114_62115_62116_62117_62118_62119_62120_62121_62122_62123_62124_62125_62126_62127_62128_62129_62130_62131_62132_62133_62134_62135_62136_62137_62138_62139_62140_62141_62142_62143_62144_62145_62146_62147_62148_62149_62150_62151_62152_62153_62154_62155_62156_62157_62158_62159_62160_62161_62162_62163_62164_62165_62166_62167_62168_62169_62170_62171_62172_62173_62174_62175_62176_62177_62178_62179_62180_62181_62182_62183_62184_62185_62186_62187_62188_62189_62190_62191_62192_62193_62194_62195_62196_62197_62198_62199_62200_62201_62202_62203_62204_62205_62206_62207_62208_62209_62210_62211_62212_62213_62214_62215_62216_62217_62218_62219_62220_62221_62222_62223_62224_62225_62226_62227_62228_62229_62230_62231_62232_62233_62234_62235_62236_62237_62238_62239_62240_62241_62242_62243_62244_62245_62246_62247_62248_62249_62250_62251_62252_62253_62254_62255_62256_62257_62258_62259_62260_62261_62262_62263_62264_62265_62266_62267_62268_62269_62270_62271_62272_62273_62274_62275_62276_62277_62278_62279_62280_62281_62282_62283_62284_62285_62286_62287_62288_62289_62290_62291_62292_62293_62294_62295_62296_62297_62298_62299_62300_62301_62302_62303_62304_62305_62306_62307_62308_62309_62310_62311_62312_62313_62314_62315_62316_62317_62318_62319_62320_62321_62322_62323_62324_62325_62326_62327_62328_62329_62330_62331_62332_62333_62334_62335_62336_62337_62338_62339_62340_62341_62342_62343_62344_62345_62346_62347_62348_62349_62350_62351_62352_62353_62354_62355_62356_62357_62358_62359_62360_62361_62362_62363_62364_62365_62366_62367_62368_62369_62370_62371_62372_62373_62374_62375_62376_62377_62378_62379_62380_62381_62382_62383_62384_62385_62386_62387_62388_62389_62390_62391_62392_62393_62394_62395_62396_62397_62398_62399_62400_62401_62402_62403_62404_62405_62406_62407_62408_62409_62410_62411_62412_62413_62414_62415_62416_62417_62418_62419_62420_62421_62422_62423_62424_62425_62426_62427_62428_62429_62430_62431_62432_62433_62434_62435_62436_62437_62438_62439_62440_62441_62442_62443_62444_62445_62446_62447_62448_62449_62450_62451_62452_62453_62454_62455_62456_62457_62458_62459_62460_62461_62462_62463_62464_62465_62466_62467_62468_62469_62470_62471_62472_62473_62474_62475_62476_62477_62478_62479_62480_62481_62482_62483_62484_62485_62486_62487_62488_62489_62490_62491_62492_62493_62494_62495_62496_62497_62498_62499_62500_62501_62502_62503_62504_62505_62506_62507_62508_62509_62510_62511_62512_62513_62514_62515_62516_62517_62518_62519_62520_62521_62522_62523_62524_62525_62526_62527_62528_62529_62530_62531_62532_62533_62534_62535_62536_62537_62538_62539_62540_62541_62542_62543_62544_62545_62546_62547_62548_62549_62550_62551_62552_62553_62554_62555_62556_62557_62558_62559_62560_62561_62562_62563_62564_62565_62566_62567_62568_62569_62570_62571_62572_62573_62574_62575_62576_62577_62578_62579_62580_62581_62582_62583_62584_62585_62586_62587_62588_62589_62590_62591_62592_62593_62594_62595_62596_62597_62598_62599_62600_62601_62602_62603_62604_62605_62606_62607_62608_62609_62610_62611_62612_62613_62614_62615_62616_62617_62618_62619_62620_62621_62622_62623_62624_62625_62626_62627_62628_62629_62630_62631_62632_62633_62634_62635_62636_62637_62638_62639_62640_62641_62642_62643_62644_62645_62646_62647_62648_62649_62650_62651_62652_62653_62654_62655_62656_62657_62658_62659_62660_62661_62662_62663_62664_62665_62666_62667_62668_62669_62670_62671_62672_62673_62674_62675_62676_62677_62678_62679_62680_62681_62682_62683_62684_62685_62686_62687_62688_62689_62690_62691_62692_62693_62694_62695_62696_62697_62698_62699_62700_62701_62702_62703_62704_62705_62706_62707_62708_62709_62710_62711_62712_62713_62714_62715_62716_62717_62718_62719_62720_62721_62722_62723_62724_62725_62726_62727_62728_62729_62730_62731_62732_62733_62734_62735_62736_62737_62738_62739_62740_62741_62742_62743_62744_62745_62746_62747_62748_62749_62750_62751_62752_62753_62754_62755_62756_62757_62758_62759_62760_62761_62762_62763_62764_62765_62766_62767_62768_62769_62770_62771_62772_62773_62774_62775_62776_62777_62778_62779_62780_62781_62782_62783_62784_62785_62786_62787_62788_62789_62790_62791_62792_62793_62794_62795_62796_62797_62798_62799_62800_62801_62802_62803_62804_62805_62806_62807_62808_62809_62810_62811_62812_62813_62814_62815_62816_62817_62818_62819_62820_62821_62822_62823_62824_62825_62826_62827_62828_62829_62830_62831_62832_62833_62834_62835_62836_62837_62838_62839_62840_62841_62842_62843_62844_62845_62846_62847_62848_62849_62850_62851_62852_62853_62854_62855_62856_62857_62858_62859_62860_62861_62862_62863_62864_62865_62866_62867_62868_62869_62870_62871_62872_62873_62874_62875_62876_62877_62878_62879_62880_62881_62882_62883_62884_62885_62886_62887_62888_62889_62890_62891_62892_62893_62894_62895_62896_62897_62898_62899_62900_62901_62902_62903_62904_62905_62906_62907_62908_62909_62910_62911_62912_62913_62914_62915_62916_62917_62918_62919_62920_62921_62922_62923_62924_62925_62926_62927_62928_62929_62930_62931_62932_62933_62934_62935_62936_62937_62938_62939_62940_62941_62942_62943_62944_62945_62946_62947_62948_62949_62950_62951_62952_62953_62954_62955_62956_62957_62958_62959_62960_62961_62962_62963_62964_62965_62966_62967_62968_62969_62970_62971_62972_62973_62974_62975_62976_62977_62978_62979_62980_62981_62982_62983_62984_62985_62986_62987_62988_62989_62990_62991_62992_62993_62994_62995_62996_62997_62998_62999_63000_63001_63002_63003_63004_63005_63006_63007_63008_63009_63010_63011_63012_63013_63014_63015_63016_63017_63018_63019_63020_63021_63022_63023_63024_63025_63026_63027_63028_63029_63030_63031_63032_63033_63034_63035_63036_63037_63038_63039_63040_63041_63042_63043_63044_63045_63046_63047_63048_63049_63050_63051_63052_63053_63054_63055_63056_63057_63058_63059_63060_63061_63062_63063_63064_63065_63066_63067_63068_63069_63070_63071_63072_63073_63074_63075_63076_63077_63078_63079_63080_63081_63082_63083_63084_63085_63086_63087_63088_63089_63090_63091_63092_63093_63094_63095_63096_63097_63098_63099_63100_63101_63102_63103_63104_63105_63106_63107_63108_63109_63110_63111_63112_63113_63114_63115_63116_63117_63118_63119_63120_63121_63122_63123_63124_63125_63126_63127_63128_63129_63130_63131_63132_63133_63134_63135_63136_63137_63138_63139_63140_63141_63142_63143_63144_63145_63146_63147_63148_63149_63150_63151_63152_63153_63154_63155_63156_63157_63158_63159_63160_63161_63162_63163_63164_63165_63166_63167_63168_63169_63170_63171_63172_63173_63174_63175_63176_63177_63178_63179_63180_63181_63182_63183_63184_63185_63186_63187_63188_63189_63190_63191_63192_63193_63194_63195_63196_63197_63198_63199_63200_63201_63202_63203_63204_63205_63206_63207_63208_63209_63210_63211_63212_63213_63214_63215_63216_63217_63218_63219_63220_63221_63222_63223_63224_63225_63226_63227_63228_63229_63230_63231_63232_63233_63234_63235_63236_63237_63238_63239_63240_63241_63242_63243_63244_63245_63246_63247_63248_63249_63250_63251_63252_63253_63254_63255_63256_63257_63258_63259_63260_63261_63262_63263_63264_63265_63266_63267_63268_63269_63270_63271_63272_63273_63274_63275_63276_63277_63278_63279_63280_63281_63282_63283_63284_63285_63286_63287_63288_63289_63290_63291_63292_63293_63294_63295_63296_63297_63298_63299_63300_63301_63302_63303_63304_63305_63306_63307_63308_63309_63310_63311_63312_63313_63314_63315_63316_63317_63318_63319_63320_63321_63322_63323_63324_63325_63326_63327_63328_63329_63330_63331_63332_63333_63334_63335_63336_63337_63338_63339_63340_63341_63342_63343_63344_63345_63346_63347_63348_63349_63350_63351_63352_63353_63354_63355_63356_63357_63358_63359_63360_63361_63362_63363_63364_63365_63366_63367_63368_63369_63370_63371_63372_63373_63374_63375_63376_63377_63378_63379_63380_63381_63382_63383_63384_63385_63386_63387_63388_63389_63390_63391_63392_63393_63394_63395_63396_63397_63398_63399_63400_63401_63402_63403_63404_63405_63406_63407_63408_63409_63410_63411_63412_63413_63414_63415_63416_63417_63418_63419_63420_63421_63422_63423_63424_63425_63426_63427_63428_63429_63430_63431_63432_63433_63434_63435_63436_63437_63438_63439_63440_63441_63442_63443_63444_63445_63446_63447_63448_63449_63450_63451_63452_63453_63454_63455_63456_63457_63458_63459_63460_63461_63462_63463_63464_63465_63466_63467_63468_63469_63470_63471_63472_63473_63474_63475_63476_63477_63478_63479_63480_63481_63482_63483_63484_63485_63486_63487_63488_63489_63490_63491_63492_63493_63494_63495_63496_63497_63498_63499_63500_63501_63502_63503_63504_63505_63506_63507_63508_63509_63510_63511_63512_63513_63514_63515_63516_63517_63518_63519_63520_63521_63522_63523_63524_63525_63526_63527_63528_63529_63530_63531_63532_63533_63534_63535_63536_63537_63538_63539_63540_63541_63542_63543_63544_63545_63546_63547_63548_63549_63550_63551_63552_63553_63554_63555_63556_63557_63558_63559_63560_63561_63562_63563_63564_63565_63566_63567_63568_63569_63570_63571_63572_63573_63574_63575_63576_63577_63578_63579_63580_63581_63582_63583_63584_63585_63586_63587_63588_63589_63590_63591_63592_63593_63594_63595_63596_63597_63598_63599_63600_63601_63602_63603_63604_63605_63606_63607_63608_63609_63610_63611_63612_63613_63614_63615_63616_63617_63618_63619_63620_63621_63622_63623_63624_63625_63626_63627_63628_63629_63630_63631_63632_63633_63634_63635_63636_63637_63638_63639_63640_63641_63642_63643_63644_63645_63646_63647_63648_63649_63650_63651_63652_63653_63654_63655_63656_63657_63658_63659_63660_63661_63662_63663_63664_63665_63666_63667_63668_63669_63670_63671_63672_63673_63674_63675_63676_63677_63678_63679_63680_63681_63682_63683_63684_63685_63686_63687_63688_63689_63690_63691_63692_63693_63694_63695_63696_63697_63698_63699_63700_63701_63702_63703_63704_63705_63706_63707_63708_63709_63710_63711_63712_63713_63714_63715_63716_63717_63718_63719_63720_63721_63722_63723_63724_63725_63726_63727_63728_63729_63730_63731_63732_63733_63734_63735_63736_63737_63738_63739_63740_63741_63742_63743_63744_63745_63746_63747_63748_63749_63750_63751_63752_63753_63754_63755_63756_63757_63758_63759_63760_63761_63762_63763_63764_63765_63766_63767_63768_63769_63770_63771_63772_63773_63774_63775_63776_63777_63778_63779_63780_63781_63782_63783_63784_63785_63786_63787_63788_63789_63790_63791_63792_63793_63794_63795_63796_63797_63798_63799_63800_63801_63802_63803_63804_63805_63806_63807_63808_63809_63810_63811_63812_63813_63814_63815_63816_63817_63818_63819_63820_63821_63822_63823_63824_63825_63826_63827_63828_63829_63830_63831_63832_63833_63834_63835_63836_63837_63838_63839_63840_63841_63842_63843_63844_63845_63846_63847_63848_63849_63850_63851_63852_63853_63854_63855_63856_63857_63858_63859_63860_63861_63862_63863_63864_63865_63866_63867_63868_63869_63870_63871_63872_63873_63874_63875_63876_63877_63878_63879_63880_63881_63882_63883_63884_63885_63886_63887_63888_63889_63890_63891_63892_63893_63894_63895_63896_63897_63898_63899_63900_63901_63902_63903_63904_63905_63906_63907_63908_63909_63910_63911_63912_63913_63914_63915_63916_63917_63918_63919_63920_63921_63922_63923_63924_63925_63926_63927_63928_63929_63930_63931_63932_63933_63934_63935_63936_63937_63938_63939_63940_63941_63942_63943_63944_63945_63946_63947_63948_63949_63950_63951_63952_63953_63954_63955_63956_63957_63958_63959_63960_63961_63962_63963_63964_63965_63966_63967_63968_63969_63970_63971_63972_63973_63974_63975_63976_63977_63978_63979_63980_63981_63982_63983_63984_63985_63986_63987_63988_63989_63990_63991_63992_63993_63994_63995_63996_63997_63998_63999_64000_64001_64002_64003_64004_64005_64006_64007_64008_64009_64010_64011_64012_64013_64014_64015_64016_64017_64018_64019_64020_64021_64022_64023_64024_64025_64026_64027_64028_64029_64030_64031_64032_64033_64034_64035_64036_64037_64038_64039_64040_64041_64042_64043_64044_64045_64046_64047_64048_64049_64050_64051_64052_64053_64054_64055_64056_64057_64058_64059_64060_64061_64062_64063_64064_64065_64066_64067_64068_64069_64070_64071_64072_64073_64074_64075_64076_64077_64078_64079_64080_64081_64082_64083_64084_64085_64086_64087_64088_64089_64090_64091_64092_64093_64094_64095_64096_64097_64098_64099_64100_64101_64102_64103_64104_64105_64106_64107_64108_64109_64110_64111_64112_64113_64114_64115_64116_64117_64118_64119_64120_64121_64122_64123_64124_64125_64126_64127_64128_64129_64130_64131_64132_64133_64134_64135_64136_64137_64138_64139_64140_64141_64142_64143_64144_64145_64146_64147_64148_64149_64150_64151_64152_64153_64154_64155_64156_64157_64158_64159_64160_64161_64162_64163_64164_64165_64166_64167_64168_64169_64170_64171_64172_64173_64174_64175_64176_64177_64178_64179_64180_64181_64182_64183_64184_64185_64186_64187_64188_64189_64190_64191_64192_64193_64194_64195_64196_64197_64198_64199_64200_64201_64202_64203_64204_64205_64206_64207_64208_64209_64210_64211_64212_64213_64214_64215_64216_64217_64218_64219_64220_64221_64222_64223_64224_64225_64226_64227_64228_64229_64230_64231_64232_64233_64234_64235_64236_64237_64238_64239_64240_64241_64242_64243_64244_64245_64246_64247_64248_64249_64250_64251_64252_64253_64254_64255_64256_64257_64258_64259_64260_64261_64262_64263_64264_64265_64266_64267_64268_64269_64270_64271_64272_64273_64274_64275_64276_64277_64278_64279_64280_64281_64282_64283_64284_64285_64286_64287_64288_64289_64290_64291_64292_64293_64294_64295_64296_64297_64298_64299_64300_64301_64302_64303_64304_64305_64306_64307_64308_64309_64310_64311_64312_64313_64314_64315_64316_64317_64318_64319_64320_64321_64322_64323_64324_64325_64326_64327_64328_64329_64330_64331_64332_64333_64334_64335_64336_64337_64338_64339_64340_64341_64342_64343_64344_64345_64346_64347_64348_64349_64350_64351_64352_64353_64354_64355_64356_64357_64358_64359_64360_64361_64362_64363_64364_64365_64366_64367_64368_64369_64370_64371_64372_64373_64374_64375_64376_64377_64378_64379_64380_64381_64382_64383_64384_64385_64386_64387_64388_64389_64390_64391_64392_64393_64394_64395_64396_64397_64398_64399_64400_64401_64402_64403_64404_64405_64406_64407_64408_64409_64410_64411_64412_64413_64414_64415_64416_64417_64418_64419_64420_64421_64422_64423_64424_64425_64426_64427_64428_64429_64430_64431_64432_64433_64434_64435_64436_64437_64438_64439_64440_64441_64442_64443_64444_64445_64446_64447_64448_64449_64450_64451_64452_64453_64454_64455_64456_64457_64458_64459_64460_64461_64462_64463_64464_64465_64466_64467_64468_64469_64470_64471_64472_64473_64474_64475_64476_64477_64478_64479_64480_64481_64482_64483_64484_64485_64486_64487_64488_64489_64490_64491_64492_64493_64494_64495_64496_64497_64498_64499_64500_64501_64502_64503_64504_64505_64506_64507_64508_64509_64510_64511_64512_64513_64514_64515_64516_64517_64518_64519_64520_64521_64522_64523_64524_64525_64526_64527_64528_64529_64530_64531_64532_64533_64534_64535_64536_64537_64538_64539_64540_64541_64542_64543_64544_64545_64546_64547_64548_64549_64550_64551_64552_64553_64554_64555_64556_64557_64558_64559_64560_64561_64562_64563_64564_64565_64566_64567_64568_64569_64570_64571_64572_64573_64574_64575_64576_64577_64578_64579_64580_64581_64582_64583_64584_64585_64586_64587_64588_64589_64590_64591_64592_64593_64594_64595_64596_64597_64598_64599_64600_64601_64602_64603_64604_64605_64606_64607_64608_64609_64610_64611_64612_64613_64614_64615_64616_64617_64618_64619_64620_64621_64622_64623_64624_64625_64626_64627_64628_64629_64630_64631_64632_64633_64634_64635_64636_64637_64638_64639_64640_64641_64642_64643_64644_64645_64646_64647_64648_64649_64650_64651_64652_64653_64654_64655_64656_64657_64658_64659_64660_64661_64662_64663_64664_64665_64666_64667_64668_64669_64670_64671_64672_64673_64674_64675_64676_64677_64678_64679_64680_64681_64682_64683_64684_64685_64686_64687_64688_64689_64690_64691_64692_64693_64694_64695_64696_64697_64698_64699_64700_64701_64702_64703_64704_64705_64706_64707_64708_64709_64710_64711_64712_64713_64714_64715_64716_64717_64718_64719_64720_64721_64722_64723_64724_64725_64726_64727_64728_64729_64730_64731_64732_64733_64734_64735_64736_64737_64738_64739_64740_64741_64742_64743_64744_64745_64746_64747_64748_64749_64750_64751_64752_64753_64754_64755_64756_64757_64758_64759_64760_64761_64762_64763_64764_64765_64766_64767_64768_64769_64770_64771_64772_64773_64774_64775_64776_64777_64778_64779_64780_64781_64782_64783_64784_64785_64786_64787_64788_64789_64790_64791_64792_64793_64794_64795_64796_64797_64798_64799_64800_64801_64802_64803_64804_64805_64806_64807_64808_64809_64810_64811_64812_64813_64814_64815_64816_64817_64818_64819_64820_64821_64822_64823_64824_64825_64826_64827_64828_64829_64830_64831_64832_64833_64834_64835_64836_64837_64838_64839_64840_64841_64842_64843_64844_64845_64846_64847_64848_64849_64850_64851_64852_64853_64854_64855_64856_64857_64858_64859_64860_64861_64862_64863_64864_64865_64866_64867_64868_64869_64870_64871_64872_64873_64874_64875_64876_64877_64878_64879_64880_64881_64882_64883_64884_64885_64886_64887_64888_64889_64890_64891_64892_64893_64894_64895_64896_64897_64898_64899_64900_64901_64902_64903_64904_64905_64906_64907_64908_64909_64910_64911_64912_64913_64914_64915_64916_64917_64918_64919_64920_64921_64922_64923_64924_64925_64926_64927_64928_64929_64930_64931_64932_64933_64934_64935_64936_64937_64938_64939_64940_64941_64942_64943_64944_64945_64946_64947_64948_64949_64950_64951_64952_64953_64954_64955_64956_64957_64958_64959_64960_64961_64962_64963_64964_64965_64966_64967_64968_64969_64970_64971_64972_64973_64974_64975_64976_64977_64978_64979_64980_64981_64982_64983_64984_64985_64986_64987_64988_64989_64990_64991_64992_64993_64994_64995_64996_64997_64998_64999_65000_65001_65002_65003_65004_65005_65006_65007_65008_65009_65010_65011_65012_65013_65014_65015_65016_65017_65018_65019_65020_65021_65022_65023_65024_65025_65026_65027_65028_65029_65030_65031_65032_65033_65034_65035_65036_65037_65038_65039_65040_65041_65042_65043_65044_65045_65046_65047_65048_65049_65050_65051_65052_65053_65054_65055_65056_65057_65058_65059_65060_65061_65062_65063_65064_65065_65066_65067_65068_65069_65070_65071_65072_65073_65074_65075_65076_65077_65078_65079_65080_65081_65082_65083_65084_65085_65086_65087_65088_65089_65090_65091_65092_65093_65094_65095_65096_65097_65098_65099_65100_65101_65102_65103_65104_65105_65106_65107_65108_65109_65110_65111_65112_65113_65114_65115_65116_65117_65118_65119_65120_65121_65122_65123_65124_65125_65126_65127_65128_65129_65130_65131_65132_65133_65134_65135_65136_65137_65138_65139_65140_65141_65142_65143_65144_65145_65146_65147_65148_65149_65150_65151_65152_65153_65154_65155_65156_65157_65158_65159_65160_65161_65162_65163_65164_65165_65166_65167_65168_65169_65170_65171_65172_65173_65174_65175_65176_65177_65178_65179_65180_65181_65182_65183_65184_65185_65186_65187_65188_65189_65190_65191_65192_65193_65194_65195_65196_65197_65198_65199_65200_65201_65202_65203_65204_65205_65206_65207_65208_65209_65210_65211_65212_65213_65214_65215_65216_65217_65218_65219_65220_65221_65222_65223_65224_65225_65226_65227_65228_65229_65230_65231_65232_65233_65234_65235_65236_65237_65238_65239_65240_65241_65242_65243_65244_65245_65246_65247_65248_65249_65250_65251_65252_65253_65254_65255_65256_65257_65258_65259_65260_65261_65262_65263_65264_65265_65266_65267_65268_65269_65270_65271_65272_65273_65274_65275_65276_65277_65278_65279_65280_65281_65282_65283_65284_65285_65286_65287_65288_65289_65290_65291_65292_65293_65294_65295_65296_65297_65298_65299_65300_65301_65302_65303_65304_65305_65306_65307_65308_65309_65310_65311_65312_65313_65314_65315_65316_65317_65318_65319_65320_65321_65322_65323_65324_65325_65326_65327_65328_65329_65330_65331_65332_65333_65334_65335_65336_65337_65338_65339_65340_65341_65342_65343_65344_65345_65346_65347_65348_65349_65350_65351_65352_65353_65354_65355_65356_65357_65358_65359_65360_65361_65362_65363_65364_65365_65366_65367_65368_65369_65370_65371_65372_65373_65374_65375_65376_65377_65378_65379_65380_65381_65382_65383_65384_65385_65386_65387_65388_65389_65390_65391_65392_65393_65394_65395_65396_65397_65398_65399_65400_65401_65402_65403_65404_65405_65406_65407_65408_65409_65410_65411_65412_65413_65414_65415_65416_65417_65418_65419_65420_65421_65422_65423_65424_65425_65426_65427_65428_65429_65430_65431_65432_65433_65434_65435_65436_65437_65438_65439_65440_65441_65442_65443_65444_65445_65446_65447_65448_65449_65450_65451_65452_65453_65454_65455_65456_65457_65458_65459_65460_65461_65462_65463_65464_65465_65466_65467_65468_65469_65470_65471_65472_65473_65474_65475_65476_65477_65478_65479_65480_65481_65482_65483_65484_65485_65486_65487_65488_65489_65490_65491_65492_65493_65494_65495_65496_65497_65498_65499_65500_65501_65502_65503_65504_65505_65506_65507_65508_65509_65510_65511_65512_65513_65514_65515_65516_65517_65518_65519_65520_65521_65522_65523_65524_65525_65526_65527_65528_65529_65530_65531_65532_65533_65534_65535_65536_65537_65538_65539_65540_65541_65542_65543_65544_65545_65546_65547_65548_65549_65550_65551_65552_65553_65554_65555_65556_65557_65558_65559_65560_65561_65562_65563_65564_65565_65566_65567_65568_65569_65570_65571_65572_65573_65574_65575_65576_65577_65578_65579_65580_65581_65582_65583_65584_65585_65586_65587_65588_65589_65590_65591_65592_65593_65594_65595_65596_65597_65598_65599_65600_65601_65602_65603_65604_65605_65606_65607_65608_65609_65610_65611_65612_65613_65614_65615_65616_65617_65618_65619_65620_65621_65622_65623_65624_65625_65626_65627_65628_65629_65630_65631_65632_65633_65634_65635_65636_65637_65638_65639_65640_65641_65642_65643_65644_65645_65646_65647_65648_65649_65650_65651_65652_65653_65654_65655_65656_65657_65658_65659_65660_65661_65662_65663_65664_65665_65666_65667_65668_65669_65670_65671_65672_65673_65674_65675_65676_65677_65678_65679_65680_65681_65682_65683_65684_65685_65686_65687_65688_65689_65690_65691_65692_65693_65694_65695_65696_65697_65698_65699_65700_65701_65702_65703_65704_65705_65706_65707_65708_65709_65710_65711_65712_65713_65714_65715_65716_65717_65718_65719_65720_65721_65722_65723_65724_65725_65726_65727_65728_65729_65730_65731_65732_65733_65734_65735_65736_65737_65738_65739_65740_65741_65742_65743_65744_65745_65746_65747_65748_65749_65750_65751_65752_65753_65754_65755_65756_65757_65758_65759_65760_65761_65762_65763_65764_65765_65766_65767_65768_65769_65770_65771_65772_65773_65774_65775_65776_65777_65778_65779_65780_65781_65782_65783_65784_65785_65786_65787_65788_65789_65790_65791_65792_65793_65794_65795_65796_65797_65798_65799_65800_65801_65802_65803_65804_65805_65806_65807_65808_65809_65810_65811_65812_65813_65814_65815_65816_65817_65818_65819_65820_65821_65822_65823_65824_65825_65826_65827_65828_65829_65830_65831_65832_65833_65834_65835_65836_65837_65838_65839_65840_65841_65842_65843_65844_65845_65846_65847_65848_65849_65850_65851_65852_65853_65854_65855_65856_65857_65858_65859_65860_65861_65862_65863_65864_65865_65866_65867_65868_65869_65870_65871_65872_65873_65874_65875_65876_65877_65878_65879_65880_65881_65882_65883_65884_65885_65886_65887_65888_65889_65890_65891_65892_65893_65894_65895_65896_65897_65898_65899_65900_65901_65902_65903_65904_65905_65906_65907_65908_65909_65910_65911_65912_65913_65914_65915_65916_65917_65918_65919_65920_65921_65922_65923_65924_65925_65926_65927_65928_65929_65930_65931_65932_65933_65934_65935_65936_65937_65938_65939_65940_65941_65942_65943_65944_65945_65946_65947_65948_65949_65950_65951_65952_65953_65954_65955_65956_65957_65958_65959_65960_65961_65962_65963_65964_65965_65966_65967_65968_65969_65970_65971_65972_65973_65974_65975_65976_65977_65978_65979_65980_65981_65982_65983_65984_65985_65986_65987_65988_65989_65990_65991_65992_65993_65994_65995_65996_65997_65998_65999_66000_66001_66002_66003_66004_66005_66006_66007_66008_66009_66010_66011_66012_66013_66014_66015_66016_66017_66018_66019_66020_66021_66022_66023_66024_66025_66026_66027_66028_66029_66030_66031_66032_66033_66034_66035_66036_66037_66038_66039_66040_66041_66042_66043_66044_66045_66046_66047_66048_66049_66050_66051_66052_66053_66054_66055_66056_66057_66058_66059_66060_66061_66062_66063_66064_66065_66066_66067_66068_66069_66070_66071_66072_66073_66074_66075_66076_66077_66078_66079_66080_66081_66082_66083_66084_66085_66086_66087_66088_66089_66090_66091_66092_66093_66094_66095_66096_66097_66098_66099_66100_66101_66102_66103_66104_66105_66106_66107_66108_66109_66110_66111_66112_66113_66114_66115_66116_66117_66118_66119_66120_66121_66122_66123_66124_66125_66126_66127_66128_66129_66130_66131_66132_66133_66134_66135_66136_66137_66138_66139_66140_66141_66142_66143_66144_66145_66146_66147_66148_66149_66150_66151_66152_66153_66154_66155_66156_66157_66158_66159_66160_66161_66162_66163_66164_66165_66166_66167_66168_66169_66170_66171_66172_66173_66174_66175_66176_66177_66178_66179_66180_66181_66182_66183_66184_66185_66186_66187_66188_66189_66190_66191_66192_66193_66194_66195_66196_66197_66198_66199_66200_66201_66202_66203_66204_66205_66206_66207_66208_66209_66210_66211_66212_66213_66214_66215_66216_66217_66218_66219_66220_66221_66222_66223_66224_66225_66226_66227_66228_66229_66230_66231_66232_66233_66234_66235_66236_66237_66238_66239_66240_66241_66242_66243_66244_66245_66246_66247_66248_66249_66250_66251_66252_66253_66254_66255_66256_66257_66258_66259_66260_66261_66262_66263_66264_66265_66266_66267_66268_66269_66270_66271_66272_66273_66274_66275_66276_66277_66278_66279_66280_66281_66282_66283_66284_66285_66286_66287_66288_66289_66290_66291_66292_66293_66294_66295_66296_66297_66298_66299_66300_66301_66302_66303_66304_66305_66306_66307_66308_66309_66310_66311_66312_66313_66314_66315_66316_66317_66318_66319_66320_66321_66322_66323_66324_66325_66326_66327_66328_66329_66330_66331_66332_66333_66334_66335_66336_66337_66338_66339_66340_66341_66342_66343_66344_66345_66346_66347_66348_66349_66350_66351_66352_66353_66354_66355_66356_66357_66358_66359_66360_66361_66362_66363_66364_66365_66366_66367_66368_66369_66370_66371_66372_66373_66374_66375_66376_66377_66378_66379_66380_66381_66382_66383_66384_66385_66386_66387_66388_66389_66390_66391_66392_66393_66394_66395_66396_66397_66398_66399_66400_66401_66402_66403_66404_66405_66406_66407_66408_66409_66410_66411_66412_66413_66414_66415_66416_66417_66418_66419_66420_66421_66422_66423_66424_66425_66426_66427_66428_66429_66430_66431_66432_66433_66434_66435_66436_66437_66438_66439_66440_66441_66442_66443_66444_66445_66446_66447_66448_66449_66450_66451_66452_66453_66454_66455_66456_66457_66458_66459_66460_66461_66462_66463_66464_66465_66466_66467_66468_66469_66470_66471_66472_66473_66474_66475_66476_66477_66478_66479_66480_66481_66482_66483_66484_66485_66486_66487_66488_66489_66490_66491_66492_66493_66494_66495_66496_66497_66498_66499_66500_66501_66502_66503_66504_66505_66506_66507_66508_66509_66510_66511_66512_66513_66514_66515_66516_66517_66518_66519_66520_66521_66522_66523_66524_66525_66526_66527_66528_66529_66530_66531_66532_66533_66534_66535_66536_66537_66538_66539_66540_66541_66542_66543_66544_66545_66546_66547_66548_66549_66550_66551_66552_66553_66554_66555_66556_66557_66558_66559_66560_66561_66562_66563_66564_66565_66566_66567_66568_66569_66570_66571_66572_66573_66574_66575_66576_66577_66578_66579_66580_66581_66582_66583_66584_66585_66586_66587_66588_66589_66590_66591_66592_66593_66594_66595_66596_66597_66598_66599_66600_66601_66602_66603_66604_66605_66606_66607_66608_66609_66610_66611_66612_66613_66614_66615_66616_66617_66618_66619_66620_66621_66622_66623_66624_66625_66626_66627_66628_66629_66630_66631_66632_66633_66634_66635_66636_66637_66638_66639_66640_66641_66642_66643_66644_66645_66646_66647_66648_66649_66650_66651_66652_66653_66654_66655_66656_66657_66658_66659_66660_66661_66662_66663_66664_66665_66666_66667_66668_66669_66670_66671_66672_66673_66674_66675_66676_66677_66678_66679_66680_66681_66682_66683_66684_66685_66686_66687_66688_66689_66690_66691_66692_66693_66694_66695_66696_66697_66698_66699_66700_66701_66702_66703_66704_66705_66706_66707_66708_66709_66710_66711_66712_66713_66714_66715_66716_66717_66718_66719_66720_66721_66722_66723_66724_66725_66726_66727_66728_66729_66730_66731_66732_66733_66734_66735_66736_66737_66738_66739_66740_66741_66742_66743_66744_66745_66746_66747_66748_66749_66750_66751_66752_66753_66754_66755_66756_66757_66758_66759_66760_66761_66762_66763_66764_66765_66766_66767_66768_66769_66770_66771_66772_66773_66774_66775_66776_66777_66778_66779_66780_66781_66782_66783_66784_66785_66786_66787_66788_66789_66790_66791_66792_66793_66794_66795_66796_66797_66798_66799_66800_66801_66802_66803_66804_66805_66806_66807_66808_66809_66810_66811_66812_66813_66814_66815_66816_66817_66818_66819_66820_66821_66822_66823_66824_66825_66826_66827_66828_66829_66830_66831_66832_66833_66834_66835_66836_66837_66838_66839_66840_66841_66842_66843_66844_66845_66846_66847_66848_66849_66850_66851_66852_66853_66854_66855_66856_66857_66858_66859_66860_66861_66862_66863_66864_66865_66866_66867_66868_66869_66870_66871_66872_66873_66874_66875_66876_66877_66878_66879_66880_66881_66882_66883_66884_66885_66886_66887_66888_66889_66890_66891_66892_66893_66894_66895_66896_66897_66898_66899_66900_66901_66902_66903_66904_66905_66906_66907_66908_66909_66910_66911_66912_66913_66914_66915_66916_66917_66918_66919_66920_66921_66922_66923_66924_66925_66926_66927_66928_66929_66930_66931_66932_66933_66934_66935_66936_66937_66938_66939_66940_66941_66942_66943_66944_66945_66946_66947_66948_66949_66950_66951_66952_66953_66954_66955_66956_66957_66958_66959_66960_66961_66962_66963_66964_66965_66966_66967_66968_66969_66970_66971_66972_66973_66974_66975_66976_66977_66978_66979_66980_66981_66982_66983_66984_66985_66986_66987_66988_66989_66990_66991_66992_66993_66994_66995_66996_66997_66998_66999_67000_67001_67002_67003_67004_67005_67006_67007_67008_67009_67010_67011_67012_67013_67014_67015_67016_67017_67018_67019_67020_67021_67022_67023_67024_67025_67026_67027_67028_67029_67030_67031_67032_67033_67034_67035_67036_67037_67038_67039_67040_67041_67042_67043_67044_67045_67046_67047_67048_67049_67050_67051_67052_67053_67054_67055_67056_67057_67058_67059_67060_67061_67062_67063_67064_67065_67066_67067_67068_67069_67070_67071_67072_67073_67074_67075_67076_67077_67078_67079_67080_67081_67082_67083_67084_67085_67086_67087_67088_67089_67090_67091_67092_67093_67094_67095_67096_67097_67098_67099_67100_67101_67102_67103_67104_67105_67106_67107_67108_67109_67110_67111_67112_67113_67114_67115_67116_67117_67118_67119_67120_67121_67122_67123_67124_67125_67126_67127_67128_67129_67130_67131_67132_67133_67134_67135_67136_67137_67138_67139_67140_67141_67142_67143_67144_67145_67146_67147_67148_67149_67150_67151_67152_67153_67154_67155_67156_67157_67158_67159_67160_67161_67162_67163_67164_67165_67166_67167_67168_67169_67170_67171_67172_67173_67174_67175_67176_67177_67178_67179_67180_67181_67182_67183_67184_67185_67186_67187_67188_67189_67190_67191_67192_67193_67194_67195_67196_67197_67198_67199_67200_67201_67202_67203_67204_67205_67206_67207_67208_67209_67210_67211_67212_67213_67214_67215_67216_67217_67218_67219_67220_67221_67222_67223_67224_67225_67226_67227_67228_67229_67230_67231_67232_67233_67234_67235_67236_67237_67238_67239_67240_67241_67242_67243_67244_67245_67246_67247_67248_67249_67250_67251_67252_67253_67254_67255_67256_67257_67258_67259_67260_67261_67262_67263_67264_67265_67266_67267_67268_67269_67270_67271_67272_67273_67274_67275_67276_67277_67278_67279_67280_67281_67282_67283_67284_67285_67286_67287_67288_67289_67290_67291_67292_67293_67294_67295_67296_67297_67298_67299_67300_67301_67302_67303_67304_67305_67306_67307_67308_67309_67310_67311_67312_67313_67314_67315_67316_67317_67318_67319_67320_67321_67322_67323_67324_67325_67326_67327_67328_67329_67330_67331_67332_67333_67334_67335_67336_67337_67338_67339_67340_67341_67342_67343_67344_67345_67346_67347_67348_67349_67350_67351_67352_67353_67354_67355_67356_67357_67358_67359_67360_67361_67362_67363_67364_67365_67366_67367_67368_67369_67370_67371_67372_67373_67374_67375_67376_67377_67378_67379_67380_67381_67382_67383_67384_67385_67386_67387_67388_67389_67390_67391_67392_67393_67394_67395_67396_67397_67398_67399_67400_67401_67402_67403_67404_67405_67406_67407_67408_67409_67410_67411_67412_67413_67414_67415_67416_67417_67418_67419_67420_67421_67422_67423_67424_67425_67426_67427_67428_67429_67430_67431_67432_67433_67434_67435_67436_67437_67438_67439_67440_67441_67442_67443_67444_67445_67446_67447_67448_67449_67450_67451_67452_67453_67454_67455_67456_67457_67458_67459_67460_67461_67462_67463_67464_67465_67466_67467_67468_67469_67470_67471_67472_67473_67474_67475_67476_67477_67478_67479_67480_67481_67482_67483_67484_67485_67486_67487_67488_67489_67490_67491_67492_67493_67494_67495_67496_67497_67498_67499_67500_67501_67502_67503_67504_67505_67506_67507_67508_67509_67510_67511_67512_67513_67514_67515_67516_67517_67518_67519_67520_67521_67522_67523_67524_67525_67526_67527_67528_67529_67530_67531_67532_67533_67534_67535_67536_67537_67538_67539_67540_67541_67542_67543_67544_67545_67546_67547_67548_67549_67550_67551_67552_67553_67554_67555_67556_67557_67558_67559_67560_67561_67562_67563_67564_67565_67566_67567_67568_67569_67570_67571_67572_67573_67574_67575_67576_67577_67578_67579_67580_67581_67582_67583_67584_67585_67586_67587_67588_67589_67590_67591_67592_67593_67594_67595_67596_67597_67598_67599_67600_67601_67602_67603_67604_67605_67606_67607_67608_67609_67610_67611_67612_67613_67614_67615_67616_67617_67618_67619_67620_67621_67622_67623_67624_67625_67626_67627_67628_67629_67630_67631_67632_67633_67634_67635_67636_67637_67638_67639_67640_67641_67642_67643_67644_67645_67646_67647_67648_67649_67650_67651_67652_67653_67654_67655_67656_67657_67658_67659_67660_67661_67662_67663_67664_67665_67666_67667_67668_67669_67670_67671_67672_67673_67674_67675_67676_67677_67678_67679_67680_67681_67682_67683_67684_67685_67686_67687_67688_67689_67690_67691_67692_67693_67694_67695_67696_67697_67698_67699_67700_67701_67702_67703_67704_67705_67706_67707_67708_67709_67710_67711_67712_67713_67714_67715_67716_67717_67718_67719_67720_67721_67722_67723_67724_67725_67726_67727_67728_67729_67730_67731_67732_67733_67734_67735_67736_67737_67738_67739_67740_67741_67742_67743_67744_67745_67746_67747_67748_67749_67750_67751_67752_67753_67754_67755_67756_67757_67758_67759_67760_67761_67762_67763_67764_67765_67766_67767_67768_67769_67770_67771_67772_67773_67774_67775_67776_67777_67778_67779_67780_67781_67782_67783_67784_67785_67786_67787_67788_67789_67790_67791_67792_67793_67794_67795_67796_67797_67798_67799_67800_67801_67802_67803_67804_67805_67806_67807_67808_67809_67810_67811_67812_67813_67814_67815_67816_67817_67818_67819_67820_67821_67822_67823_67824_67825_67826_67827_67828_67829_67830_67831_67832_67833_67834_67835_67836_67837_67838_67839_67840_67841_67842_67843_67844_67845_67846_67847_67848_67849_67850_67851_67852_67853_67854_67855_67856_67857_67858_67859_67860_67861_67862_67863_67864_67865_67866_67867_67868_67869_67870_67871_67872_67873_67874_67875_67876_67877_67878_67879_67880_67881_67882_67883_67884_67885_67886_67887_67888_67889_67890_67891_67892_67893_67894_67895_67896_67897_67898_67899_67900_67901_67902_67903_67904_67905_67906_67907_67908_67909_67910_67911_67912_67913_67914_67915_67916_67917_67918_67919_67920_67921_67922_67923_67924_67925_67926_67927_67928_67929_67930_67931_67932_67933_67934_67935_67936_67937_67938_67939_67940_67941_67942_67943_67944_67945_67946_67947_67948_67949_67950_67951_67952_67953_67954_67955_67956_67957_67958_67959_67960_67961_67962_67963_67964_67965_67966_67967_67968_67969_67970_67971_67972_67973_67974_67975_67976_67977_67978_67979_67980_67981_67982_67983_67984_67985_67986_67987_67988_67989_67990_67991_67992_67993_67994_67995_67996_67997_67998_67999_68000_68001_68002_68003_68004_68005_68006_68007_68008_68009_68010_68011_68012_68013_68014_68015_68016_68017_68018_68019_68020_68021_68022_68023_68024_68025_68026_68027_68028_68029_68030_68031_68032_68033_68034_68035_68036_68037_68038_68039_68040_68041_68042_68043_68044_68045_68046_68047_68048_68049_68050_68051_68052_68053_68054_68055_68056_68057_68058_68059_68060_68061_68062_68063_68064_68065_68066_68067_68068_68069_68070_68071_68072_68073_68074_68075_68076_68077_68078_68079_68080_68081_68082_68083_68084_68085_68086_68087_68088_68089_68090_68091_68092_68093_68094_68095_68096_68097_68098_68099_68100_68101_68102_68103_68104_68105_68106_68107_68108_68109_68110_68111_68112_68113_68114_68115_68116_68117_68118_68119_68120_68121_68122_68123_68124_68125_68126_68127_68128_68129_68130_68131_68132_68133_68134_68135_68136_68137_68138_68139_68140_68141_68142_68143_68144_68145_68146_68147_68148_68149_68150_68151_68152_68153_68154_68155_68156_68157_68158_68159_68160_68161_68162_68163_68164_68165_68166_68167_68168_68169_68170_68171_68172_68173_68174_68175_68176_68177_68178_68179_68180_68181_68182_68183_68184_68185_68186_68187_68188_68189_68190_68191_68192_68193_68194_68195_68196_68197_68198_68199_68200_68201_68202_68203_68204_68205_68206_68207_68208_68209_68210_68211_68212_68213_68214_68215_68216_68217_68218_68219_68220_68221_68222_68223_68224_68225_68226_68227_68228_68229_68230_68231_68232_68233_68234_68235_68236_68237_68238_68239_68240_68241_68242_68243_68244_68245_68246_68247_68248_68249_68250_68251_68252_68253_68254_68255_68256_68257_68258_68259_68260_68261_68262_68263_68264_68265_68266_68267_68268_68269_68270_68271_68272_68273_68274_68275_68276_68277_68278_68279_68280_68281_68282_68283_68284_68285_68286_68287_68288_68289_68290_68291_68292_68293_68294_68295_68296_68297_68298_68299_68300_68301_68302_68303_68304_68305_68306_68307_68308_68309_68310_68311_68312_68313_68314_68315_68316_68317_68318_68319_68320_68321_68322_68323_68324_68325_68326_68327_68328_68329_68330_68331_68332_68333_68334_68335_68336_68337_68338_68339_68340_68341_68342_68343_68344_68345_68346_68347_68348_68349_68350_68351_68352_68353_68354_68355_68356_68357_68358_68359_68360_68361_68362_68363_68364_68365_68366_68367_68368_68369_68370_68371_68372_68373_68374_68375_68376_68377_68378_68379_68380_68381_68382_68383_68384_68385_68386_68387_68388_68389_68390_68391_68392_68393_68394_68395_68396_68397_68398_68399_68400_68401_68402_68403_68404_68405_68406_68407_68408_68409_68410_68411_68412_68413_68414_68415_68416_68417_68418_68419_68420_68421_68422_68423_68424_68425_68426_68427_68428_68429_68430_68431_68432_68433_68434_68435_68436_68437_68438_68439_68440_68441_68442_68443_68444_68445_68446_68447_68448_68449_68450_68451_68452_68453_68454_68455_68456_68457_68458_68459_68460_68461_68462_68463_68464_68465_68466_68467_68468_68469_68470_68471_68472_68473_68474_68475_68476_68477_68478_68479_68480_68481_68482_68483_68484_68485_68486_68487_68488_68489_68490_68491_68492_68493_68494_68495_68496_68497_68498_68499_68500_68501_68502_68503_68504_68505_68506_68507_68508_68509_68510_68511_68512_68513_68514_68515_68516_68517_68518_68519_68520_68521_68522_68523_68524_68525_68526_68527_68528_68529_68530_68531_68532_68533_68534_68535_68536_68537_68538_68539_68540_68541_68542_68543_68544_68545_68546_68547_68548_68549_68550_68551_68552_68553_68554_68555_68556_68557_68558_68559_68560_68561_68562_68563_68564_68565_68566_68567_68568_68569_68570_68571_68572_68573_68574_68575_68576_68577_68578_68579_68580_68581_68582_68583_68584_68585_68586_68587_68588_68589_68590_68591_68592_68593_68594_68595_68596_68597_68598_68599_68600_68601_68602_68603_68604_68605_68606_68607_68608_68609_68610_68611_68612_68613_68614_68615_68616_68617_68618_68619_68620_68621_68622_68623_68624_68625_68626_68627_68628_68629_68630_68631_68632_68633_68634_68635_68636_68637_68638_68639_68640_68641_68642_68643_68644_68645_68646_68647_68648_68649_68650_68651_68652_68653_68654_68655_68656_68657_68658_68659_68660_68661_68662_68663_68664_68665_68666_68667_68668_68669_68670_68671_68672_68673_68674_68675_68676_68677_68678_68679_68680_68681_68682_68683_68684_68685_68686_68687_68688_68689_68690_68691_68692_68693_68694_68695_68696_68697_68698_68699_68700_68701_68702_68703_68704_68705_68706_68707_68708_68709_68710_68711_68712_68713_68714_68715_68716_68717_68718_68719_68720_68721_68722_68723_68724_68725_68726_68727_68728_68729_68730_68731_68732_68733_68734_68735_68736_68737_68738_68739_68740_68741_68742_68743_68744_68745_68746_68747_68748_68749_68750_68751_68752_68753_68754_68755_68756_68757_68758_68759_68760_68761_68762_68763_68764_68765_68766_68767_68768_68769_68770_68771_68772_68773_68774_68775_68776_68777_68778_68779_68780_68781_68782_68783_68784_68785_68786_68787_68788_68789_68790_68791_68792_68793_68794_68795_68796_68797_68798_68799_68800_68801_68802_68803_68804_68805_68806_68807_68808_68809_68810_68811_68812_68813_68814_68815_68816_68817_68818_68819_68820_68821_68822_68823_68824_68825_68826_68827_68828_68829_68830_68831_68832_68833_68834_68835_68836_68837_68838_68839_68840_68841_68842_68843_68844_68845_68846_68847_68848_68849_68850_68851_68852_68853_68854_68855_68856_68857_68858_68859_68860_68861_68862_68863_68864_68865_68866_68867_68868_68869_68870_68871_68872_68873_68874_68875_68876_68877_68878_68879_68880_68881_68882_68883_68884_68885_68886_68887_68888_68889_68890_68891_68892_68893_68894_68895_68896_68897_68898_68899_68900_68901_68902_68903_68904_68905_68906_68907_68908_68909_68910_68911_68912_68913_68914_68915_68916_68917_68918_68919_68920_68921_68922_68923_68924_68925_68926_68927_68928_68929_68930_68931_68932_68933_68934_68935_68936_68937_68938_68939_68940_68941_68942_68943_68944_68945_68946_68947_68948_68949_68950_68951_68952_68953_68954_68955_68956_68957_68958_68959_68960_68961_68962_68963_68964_68965_68966_68967_68968_68969_68970_68971_68972_68973_68974_68975_68976_68977_68978_68979_68980_68981_68982_68983_68984_68985_68986_68987_68988_68989_68990_68991_68992_68993_68994_68995_68996_68997_68998_68999_69000_69001_69002_69003_69004_69005_69006_69007_69008_69009_69010_69011_69012_69013_69014_69015_69016_69017_69018_69019_69020_69021_69022_69023_69024_69025_69026_69027_69028_69029_69030_69031_69032_69033_69034_69035_69036_69037_69038_69039_69040_69041_69042_69043_69044_69045_69046_69047_69048_69049_69050_69051_69052_69053_69054_69055_69056_69057_69058_69059_69060_69061_69062_69063_69064_69065_69066_69067_69068_69069_69070_69071_69072_69073_69074_69075_69076_69077_69078_69079_69080_69081_69082_69083_69084_69085_69086_69087_69088_69089_69090_69091_69092_69093_69094_69095_69096_69097_69098_69099_69100_69101_69102_69103_69104_69105_69106_69107_69108_69109_69110_69111_69112_69113_69114_69115_69116_69117_69118_69119_69120_69121_69122_69123_69124_69125_69126_69127_69128_69129_69130_69131_69132_69133_69134_69135_69136_69137_69138_69139_69140_69141_69142_69143_69144_69145_69146_69147_69148_69149_69150_69151_69152_69153_69154_69155_69156_69157_69158_69159_69160_69161_69162_69163_69164_69165_69166_69167_69168_69169_69170_69171_69172_69173_69174_69175_69176_69177_69178_69179_69180_69181_69182_69183_69184_69185_69186_69187_69188_69189_69190_69191_69192_69193_69194_69195_69196_69197_69198_69199_69200_69201_69202_69203_69204_69205_69206_69207_69208_69209_69210_69211_69212_69213_69214_69215_69216_69217_69218_69219_69220_69221_69222_69223_69224_69225_69226_69227_69228_69229_69230_69231_69232_69233_69234_69235_69236_69237_69238_69239_69240_69241_69242_69243_69244_69245_69246_69247_69248_69249_69250_69251_69252_69253_69254_69255_69256_69257_69258_69259_69260_69261_69262_69263_69264_69265_69266_69267_69268_69269_69270_69271_69272_69273_69274_69275_69276_69277_69278_69279_69280_69281_69282_69283_69284_69285_69286_69287_69288_69289_69290_69291_69292_69293_69294_69295_69296_69297_69298_69299_69300_69301_69302_69303_69304_69305_69306_69307_69308_69309_69310_69311_69312_69313_69314_69315_69316_69317_69318_69319_69320_69321_69322_69323_69324_69325_69326_69327_69328_69329_69330_69331_69332_69333_69334_69335_69336_69337_69338_69339_69340_69341_69342_69343_69344_69345_69346_69347_69348_69349_69350_69351_69352_69353_69354_69355_69356_69357_69358_69359_69360_69361_69362_69363_69364_69365_69366_69367_69368_69369_69370_69371_69372_69373_69374_69375_69376_69377_69378_69379_69380_69381_69382_69383_69384_69385_69386_69387_69388_69389_69390_69391_69392_69393_69394_69395_69396_69397_69398_69399_69400_69401_69402_69403_69404_69405_69406_69407_69408_69409_69410_69411_69412_69413_69414_69415_69416_69417_69418_69419_69420_69421_69422_69423_69424_69425_69426_69427_69428_69429_69430_69431_69432_69433_69434_69435_69436_69437_69438_69439_69440_69441_69442_69443_69444_69445_69446_69447_69448_69449_69450_69451_69452_69453_69454_69455_69456_69457_69458_69459_69460_69461_69462_69463_69464_69465_69466_69467_69468_69469_69470_69471_69472_69473_69474_69475_69476_69477_69478_69479_69480_69481_69482_69483_69484_69485_69486_69487_69488_69489_69490_69491_69492_69493_69494_69495_69496_69497_69498_69499_69500_69501_69502_69503_69504_69505_69506_69507_69508_69509_69510_69511_69512_69513_69514_69515_69516_69517_69518_69519_69520_69521_69522_69523_69524_69525_69526_69527_69528_69529_69530_69531_69532_69533_69534_69535_69536_69537_69538_69539_69540_69541_69542_69543_69544_69545_69546_69547_69548_69549_69550_69551_69552_69553_69554_69555_69556_69557_69558_69559_69560_69561_69562_69563_69564_69565_69566_69567_69568_69569_69570_69571_69572_69573_69574_69575_69576_69577_69578_69579_69580_69581_69582_69583_69584_69585_69586_69587_69588_69589_69590_69591_69592_69593_69594_69595_69596_69597_69598_69599_69600_69601_69602_69603_69604_69605_69606_69607_69608_69609_69610_69611_69612_69613_69614_69615_69616_69617_69618_69619_69620_69621_69622_69623_69624_69625_69626_69627_69628_69629_69630_69631_69632_69633_69634_69635_69636_69637_69638_69639_69640_69641_69642_69643_69644_69645_69646_69647_69648_69649_69650_69651_69652_69653_69654_69655_69656_69657_69658_69659_69660_69661_69662_69663_69664_69665_69666_69667_69668_69669_69670_69671_69672_69673_69674_69675_69676_69677_69678_69679_69680_69681_69682_69683_69684_69685_69686_69687_69688_69689_69690_69691_69692_69693_69694_69695_69696_69697_69698_69699_69700_69701_69702_69703_69704_69705_69706_69707_69708_69709_69710_69711_69712_69713_69714_69715_69716_69717_69718_69719_69720_69721_69722_69723_69724_69725_69726_69727_69728_69729_69730_69731_69732_69733_69734_69735_69736_69737_69738_69739_69740_69741_69742_69743_69744_69745_69746_69747_69748_69749_69750_69751_69752_69753_69754_69755_69756_69757_69758_69759_69760_69761_69762_69763_69764_69765_69766_69767_69768_69769_69770_69771_69772_69773_69774_69775_69776_69777_69778_69779_69780_69781_69782_69783_69784_69785_69786_69787_69788_69789_69790_69791_69792_69793_69794_69795_69796_69797_69798_69799_69800_69801_69802_69803_69804_69805_69806_69807_69808_69809_69810_69811_69812_69813_69814_69815_69816_69817_69818_69819_69820_69821_69822_69823_69824_69825_69826_69827_69828_69829_69830_69831_69832_69833_69834_69835_69836_69837_69838_69839_69840_69841_69842_69843_69844_69845_69846_69847_69848_69849_69850_69851_69852_69853_69854_69855_69856_69857_69858_69859_69860_69861_69862_69863_69864_69865_69866_69867_69868_69869_69870_69871_69872_69873_69874_69875_69876_69877_69878_69879_69880_69881_69882_69883_69884_69885_69886_69887_69888_69889_69890_69891_69892_69893_69894_69895_69896_69897_69898_69899_69900_69901_69902_69903_69904_69905_69906_69907_69908_69909_69910_69911_69912_69913_69914_69915_69916_69917_69918_69919_69920_69921_69922_69923_69924_69925_69926_69927_69928_69929_69930_69931_69932_69933_69934_69935_69936_69937_69938_69939_69940_69941_69942_69943_69944_69945_69946_69947_69948_69949_69950_69951_69952_69953_69954_69955_69956_69957_69958_69959_69960_69961_69962_69963_69964_69965_69966_69967_69968_69969_69970_69971_69972_69973_69974_69975_69976_69977_69978_69979_69980_69981_69982_69983_69984_69985_69986_69987_69988_69989_69990_69991_69992_69993_69994_69995_69996_69997_69998_69999_70000_70001_70002_70003_70004_70005_70006_70007_70008_70009_70010_70011_70012_70013_70014_70015_70016_70017_70018_70019_70020_70021_70022_70023_70024_70025_70026_70027_70028_70029_70030_70031_70032_70033_70034_70035_70036_70037_70038_70039_70040_70041_70042_70043_70044_70045_70046_70047_70048_70049_70050_70051_70052_70053_70054_70055_70056_70057_70058_70059_70060_70061_70062_70063_70064_70065_70066_70067_70068_70069_70070_70071_70072_70073_70074_70075_70076_70077_70078_70079_70080_70081_70082_70083_70084_70085_70086_70087_70088_70089_70090_70091_70092_70093_70094_70095_70096_70097_70098_70099_70100_70101_70102_70103_70104_70105_70106_70107_70108_70109_70110_70111_70112_70113_70114_70115_70116_70117_70118_70119_70120_70121_70122_70123_70124_70125_70126_70127_70128_70129_70130_70131_70132_70133_70134_70135_70136_70137_70138_70139_70140_70141_70142_70143_70144_70145_70146_70147_70148_70149_70150_70151_70152_70153_70154_70155_70156_70157_70158_70159_70160_70161_70162_70163_70164_70165_70166_70167_70168_70169_70170_70171_70172_70173_70174_70175_70176_70177_70178_70179_70180_70181_70182_70183_70184_70185_70186_70187_70188_70189_70190_70191_70192_70193_70194_70195_70196_70197_70198_70199_70200_70201_70202_70203_70204_70205_70206_70207_70208_70209_70210_70211_70212_70213_70214_70215_70216_70217_70218_70219_70220_70221_70222_70223_70224_70225_70226_70227_70228_70229_70230_70231_70232_70233_70234_70235_70236_70237_70238_70239_70240_70241_70242_70243_70244_70245_70246_70247_70248_70249_70250_70251_70252_70253_70254_70255_70256_70257_70258_70259_70260_70261_70262_70263_70264_70265_70266_70267_70268_70269_70270_70271_70272_70273_70274_70275_70276_70277_70278_70279_70280_70281_70282_70283_70284_70285_70286_70287_70288_70289_70290_70291_70292_70293_70294_70295_70296_70297_70298_70299_70300_70301_70302_70303_70304_70305_70306_70307_70308_70309_70310_70311_70312_70313_70314_70315_70316_70317_70318_70319_70320_70321_70322_70323_70324_70325_70326_70327_70328_70329_70330_70331_70332_70333_70334_70335_70336_70337_70338_70339_70340_70341_70342_70343_70344_70345_70346_70347_70348_70349_70350_70351_70352_70353_70354_70355_70356_70357_70358_70359_70360_70361_70362_70363_70364_70365_70366_70367_70368_70369_70370_70371_70372_70373_70374_70375_70376_70377_70378_70379_70380_70381_70382_70383_70384_70385_70386_70387_70388_70389_70390_70391_70392_70393_70394_70395_70396_70397_70398_70399_70400_70401_70402_70403_70404_70405_70406_70407_70408_70409_70410_70411_70412_70413_70414_70415_70416_70417_70418_70419_70420_70421_70422_70423_70424_70425_70426_70427_70428_70429_70430_70431_70432_70433_70434_70435_70436_70437_70438_70439_70440_70441_70442_70443_70444_70445_70446_70447_70448_70449_70450_70451_70452_70453_70454_70455_70456_70457_70458_70459_70460_70461_70462_70463_70464_70465_70466_70467_70468_70469_70470_70471_70472_70473_70474_70475_70476_70477_70478_70479_70480_70481_70482_70483_70484_70485_70486_70487_70488_70489_70490_70491_70492_70493_70494_70495_70496_70497_70498_70499_70500_70501_70502_70503_70504_70505_70506_70507_70508_70509_70510_70511_70512_70513_70514_70515_70516_70517_70518_70519_70520_70521_70522_70523_70524_70525_70526_70527_70528_70529_70530_70531_70532_70533_70534_70535_70536_70537_70538_70539_70540_70541_70542_70543_70544_70545_70546_70547_70548_70549_70550_70551_70552_70553_70554_70555_70556_70557_70558_70559_70560_70561_70562_70563_70564_70565_70566_70567_70568_70569_70570_70571_70572_70573_70574_70575_70576_70577_70578_70579_70580_70581_70582_70583_70584_70585_70586_70587_70588_70589_70590_70591_70592_70593_70594_70595_70596_70597_70598_70599_70600_70601_70602_70603_70604_70605_70606_70607_70608_70609_70610_70611_70612_70613_70614_70615_70616_70617_70618_70619_70620_70621_70622_70623_70624_70625_70626_70627_70628_70629_70630_70631_70632_70633_70634_70635_70636_70637_70638_70639_70640_70641_70642_70643_70644_70645_70646_70647_70648_70649_70650_70651_70652_70653_70654_70655_70656_70657_70658_70659_70660_70661_70662_70663_70664_70665_70666_70667_70668_70669_70670_70671_70672_70673_70674_70675_70676_70677_70678_70679_70680_70681_70682_70683_70684_70685_70686_70687_70688_70689_70690_70691_70692_70693_70694_70695_70696_70697_70698_70699_70700_70701_70702_70703_70704_70705_70706_70707_70708_70709_70710_70711_70712_70713_70714_70715_70716_70717_70718_70719_70720_70721_70722_70723_70724_70725_70726_70727_70728_70729_70730_70731_70732_70733_70734_70735_70736_70737_70738_70739_70740_70741_70742_70743_70744_70745_70746_70747_70748_70749_70750_70751_70752_70753_70754_70755_70756_70757_70758_70759_70760_70761_70762_70763_70764_70765_70766_70767_70768_70769_70770_70771_70772_70773_70774_70775_70776_70777_70778_70779_70780_70781_70782_70783_70784_70785_70786_70787_70788_70789_70790_70791_70792_70793_70794_70795_70796_70797_70798_70799_70800_70801_70802_70803_70804_70805_70806_70807_70808_70809_70810_70811_70812_70813_70814_70815_70816_70817_70818_70819_70820_70821_70822_70823_70824_70825_70826_70827_70828_70829_70830_70831_70832_70833_70834_70835_70836_70837_70838_70839_70840_70841_70842_70843_70844_70845_70846_70847_70848_70849_70850_70851_70852_70853_70854_70855_70856_70857_70858_70859_70860_70861_70862_70863_70864_70865_70866_70867_70868_70869_70870_70871_70872_70873_70874_70875_70876_70877_70878_70879_70880_70881_70882_70883_70884_70885_70886_70887_70888_70889_70890_70891_70892_70893_70894_70895_70896_70897_70898_70899_70900_70901_70902_70903_70904_70905_70906_70907_70908_70909_70910_70911_70912_70913_70914_70915_70916_70917_70918_70919_70920_70921_70922_70923_70924_70925_70926_70927_70928_70929_70930_70931_70932_70933_70934_70935_70936_70937_70938_70939_70940_70941_70942_70943_70944_70945_70946_70947_70948_70949_70950_70951_70952_70953_70954_70955_70956_70957_70958_70959_70960_70961_70962_70963_70964_70965_70966_70967_70968_70969_70970_70971_70972_70973_70974_70975_70976_70977_70978_70979_70980_70981_70982_70983_70984_70985_70986_70987_70988_70989_70990_70991_70992_70993_70994_70995_70996_70997_70998_70999_71000_71001_71002_71003_71004_71005_71006_71007_71008_71009_71010_71011_71012_71013_71014_71015_71016_71017_71018_71019_71020_71021_71022_71023_71024_71025_71026_71027_71028_71029_71030_71031_71032_71033_71034_71035_71036_71037_71038_71039_71040_71041_71042_71043_71044_71045_71046_71047_71048_71049_71050_71051_71052_71053_71054_71055_71056_71057_71058_71059_71060_71061_71062_71063_71064_71065_71066_71067_71068_71069_71070_71071_71072_71073_71074_71075_71076_71077_71078_71079_71080_71081_71082_71083_71084_71085_71086_71087_71088_71089_71090_71091_71092_71093_71094_71095_71096_71097_71098_71099_71100_71101_71102_71103_71104_71105_71106_71107_71108_71109_71110_71111_71112_71113_71114_71115_71116_71117_71118_71119_71120_71121_71122_71123_71124_71125_71126_71127_71128_71129_71130_71131_71132_71133_71134_71135_71136_71137_71138_71139_71140_71141_71142_71143_71144_71145_71146_71147_71148_71149_71150_71151_71152_71153_71154_71155_71156_71157_71158_71159_71160_71161_71162_71163_71164_71165_71166_71167_71168_71169_71170_71171_71172_71173_71174_71175_71176_71177_71178_71179_71180_71181_71182_71183_71184_71185_71186_71187_71188_71189_71190_71191_71192_71193_71194_71195_71196_71197_71198_71199_71200_71201_71202_71203_71204_71205_71206_71207_71208_71209_71210_71211_71212_71213_71214_71215_71216_71217_71218_71219_71220_71221_71222_71223_71224_71225_71226_71227_71228_71229_71230_71231_71232_71233_71234_71235_71236_71237_71238_71239_71240_71241_71242_71243_71244_71245_71246_71247_71248_71249_71250_71251_71252_71253_71254_71255_71256_71257_71258_71259_71260_71261_71262_71263_71264_71265_71266_71267_71268_71269_71270_71271_71272_71273_71274_71275_71276_71277_71278_71279_71280_71281_71282_71283_71284_71285_71286_71287_71288_71289_71290_71291_71292_71293_71294_71295_71296_71297_71298_71299_71300_71301_71302_71303_71304_71305_71306_71307_71308_71309_71310_71311_71312_71313_71314_71315_71316_71317_71318_71319_71320_71321_71322_71323_71324_71325_71326_71327_71328_71329_71330_71331_71332_71333_71334_71335_71336_71337_71338_71339_71340_71341_71342_71343_71344_71345_71346_71347_71348_71349_71350_71351_71352_71353_71354_71355_71356_71357_71358_71359_71360_71361_71362_71363_71364_71365_71366_71367_71368_71369_71370_71371_71372_71373_71374_71375_71376_71377_71378_71379_71380_71381_71382_71383_71384_71385_71386_71387_71388_71389_71390_71391_71392_71393_71394_71395_71396_71397_71398_71399_71400_71401_71402_71403_71404_71405_71406_71407_71408_71409_71410_71411_71412_71413_71414_71415_71416_71417_71418_71419_71420_71421_71422_71423_71424_71425_71426_71427_71428_71429_71430_71431_71432_71433_71434_71435_71436_71437_71438_71439_71440_71441_71442_71443_71444_71445_71446_71447_71448_71449_71450_71451_71452_71453_71454_71455_71456_71457_71458_71459_71460_71461_71462_71463_71464_71465_71466_71467_71468_71469_71470_71471_71472_71473_71474_71475_71476_71477_71478_71479_71480_71481_71482_71483_71484_71485_71486_71487_71488_71489_71490_71491_71492_71493_71494_71495_71496_71497_71498_71499_71500_71501_71502_71503_71504_71505_71506_71507_71508_71509_71510_71511_71512_71513_71514_71515_71516_71517_71518_71519_71520_71521_71522_71523_71524_71525_71526_71527_71528_71529_71530_71531_71532_71533_71534_71535_71536_71537_71538_71539_71540_71541_71542_71543_71544_71545_71546_71547_71548_71549_71550_71551_71552_71553_71554_71555_71556_71557_71558_71559_71560_71561_71562_71563_71564_71565_71566_71567_71568_71569_71570_71571_71572_71573_71574_71575_71576_71577_71578_71579_71580_71581_71582_71583_71584_71585_71586_71587_71588_71589_71590_71591_71592_71593_71594_71595_71596_71597_71598_71599_71600_71601_71602_71603_71604_71605_71606_71607_71608_71609_71610_71611_71612_71613_71614_71615_71616_71617_71618_71619_71620_71621_71622_71623_71624_71625_71626_71627_71628_71629_71630_71631_71632_71633_71634_71635_71636_71637_71638_71639_71640_71641_71642_71643_71644_71645_71646_71647_71648_71649_71650_71651_71652_71653_71654_71655_71656_71657_71658_71659_71660_71661_71662_71663_71664_71665_71666_71667_71668_71669_71670_71671_71672_71673_71674_71675_71676_71677_71678_71679_71680_71681_71682_71683_71684_71685_71686_71687_71688_71689_71690_71691_71692_71693_71694_71695_71696_71697_71698_71699_71700_71701_71702_71703_71704_71705_71706_71707_71708_71709_71710_71711_71712_71713_71714_71715_71716_71717_71718_71719_71720_71721_71722_71723_71724_71725_71726_71727_71728_71729_71730_71731_71732_71733_71734_71735_71736_71737_71738_71739_71740_71741_71742_71743_71744_71745_71746_71747_71748_71749_71750_71751_71752_71753_71754_71755_71756_71757_71758_71759_71760_71761_71762_71763_71764_71765_71766_71767_71768_71769_71770_71771_71772_71773_71774_71775_71776_71777_71778_71779_71780_71781_71782_71783_71784_71785_71786_71787_71788_71789_71790_71791_71792_71793_71794_71795_71796_71797_71798_71799_71800_71801_71802_71803_71804_71805_71806_71807_71808_71809_71810_71811_71812_71813_71814_71815_71816_71817_71818_71819_71820_71821_71822_71823_71824_71825_71826_71827_71828_71829_71830_71831_71832_71833_71834_71835_71836_71837_71838_71839_71840_71841_71842_71843_71844_71845_71846_71847_71848_71849_71850_71851_71852_71853_71854_71855_71856_71857_71858_71859_71860_71861_71862_71863_71864_71865_71866_71867_71868_71869_71870_71871_71872_71873_71874_71875_71876_71877_71878_71879_71880_71881_71882_71883_71884_71885_71886_71887_71888_71889_71890_71891_71892_71893_71894_71895_71896_71897_71898_71899_71900_71901_71902_71903_71904_71905_71906_71907_71908_71909_71910_71911_71912_71913_71914_71915_71916_71917_71918_71919_71920_71921_71922_71923_71924_71925_71926_71927_71928_71929_71930_71931_71932_71933_71934_71935_71936_71937_71938_71939_71940_71941_71942_71943_71944_71945_71946_71947_71948_71949_71950_71951_71952_71953_71954_71955_71956_71957_71958_71959_71960_71961_71962_71963_71964_71965_71966_71967_71968_71969_71970_71971_71972_71973_71974_71975_71976_71977_71978_71979_71980_71981_71982_71983_71984_71985_71986_71987_71988_71989_71990_71991_71992_71993_71994_71995_71996_71997_71998_71999_72000_72001_72002_72003_72004_72005_72006_72007_72008_72009_72010_72011_72012_72013_72014_72015_72016_72017_72018_72019_72020_72021_72022_72023_72024_72025_72026_72027_72028_72029_72030_72031_72032_72033_72034_72035_72036_72037_72038_72039_72040_72041_72042_72043_72044_72045_72046_72047_72048_72049_72050_72051_72052_72053_72054_72055_72056_72057_72058_72059_72060_72061_72062_72063_72064_72065_72066_72067_72068_72069_72070_72071_72072_72073_72074_72075_72076_72077_72078_72079_72080_72081_72082_72083_72084_72085_72086_72087_72088_72089_72090_72091_72092_72093_72094_72095_72096_72097_72098_72099_72100_72101_72102_72103_72104_72105_72106_72107_72108_72109_72110_72111_72112_72113_72114_72115_72116_72117_72118_72119_72120_72121_72122_72123_72124_72125_72126_72127_72128_72129_72130_72131_72132_72133_72134_72135_72136_72137_72138_72139_72140_72141_72142_72143_72144_72145_72146_72147_72148_72149_72150_72151_72152_72153_72154_72155_72156_72157_72158_72159_72160_72161_72162_72163_72164_72165_72166_72167_72168_72169_72170_72171_72172_72173_72174_72175_72176_72177_72178_72179_72180_72181_72182_72183_72184_72185_72186_72187_72188_72189_72190_72191_72192_72193_72194_72195_72196_72197_72198_72199_72200_72201_72202_72203_72204_72205_72206_72207_72208_72209_72210_72211_72212_72213_72214_72215_72216_72217_72218_72219_72220_72221_72222_72223_72224_72225_72226_72227_72228_72229_72230_72231_72232_72233_72234_72235_72236_72237_72238_72239_72240_72241_72242_72243_72244_72245_72246_72247_72248_72249_72250_72251_72252_72253_72254_72255_72256_72257_72258_72259_72260_72261_72262_72263_72264_72265_72266_72267_72268_72269_72270_72271_72272_72273_72274_72275_72276_72277_72278_72279_72280_72281_72282_72283_72284_72285_72286_72287_72288_72289_72290_72291_72292_72293_72294_72295_72296_72297_72298_72299_72300_72301_72302_72303_72304_72305_72306_72307_72308_72309_72310_72311_72312_72313_72314_72315_72316_72317_72318_72319_72320_72321_72322_72323_72324_72325_72326_72327_72328_72329_72330_72331_72332_72333_72334_72335_72336_72337_72338_72339_72340_72341_72342_72343_72344_72345_72346_72347_72348_72349_72350_72351_72352_72353_72354_72355_72356_72357_72358_72359_72360_72361_72362_72363_72364_72365_72366_72367_72368_72369_72370_72371_72372_72373_72374_72375_72376_72377_72378_72379_72380_72381_72382_72383_72384_72385_72386_72387_72388_72389_72390_72391_72392_72393_72394_72395_72396_72397_72398_72399_72400_72401_72402_72403_72404_72405_72406_72407_72408_72409_72410_72411_72412_72413_72414_72415_72416_72417_72418_72419_72420_72421_72422_72423_72424_72425_72426_72427_72428_72429_72430_72431_72432_72433_72434_72435_72436_72437_72438_72439_72440_72441_72442_72443_72444_72445_72446_72447_72448_72449_72450_72451_72452_72453_72454_72455_72456_72457_72458_72459_72460_72461_72462_72463_72464_72465_72466_72467_72468_72469_72470_72471_72472_72473_72474_72475_72476_72477_72478_72479_72480_72481_72482_72483_72484_72485_72486_72487_72488_72489_72490_72491_72492_72493_72494_72495_72496_72497_72498_72499_72500_72501_72502_72503_72504_72505_72506_72507_72508_72509_72510_72511_72512_72513_72514_72515_72516_72517_72518_72519_72520_72521_72522_72523_72524_72525_72526_72527_72528_72529_72530_72531_72532_72533_72534_72535_72536_72537_72538_72539_72540_72541_72542_72543_72544_72545_72546_72547_72548_72549_72550_72551_72552_72553_72554_72555_72556_72557_72558_72559_72560_72561_72562_72563_72564_72565_72566_72567_72568_72569_72570_72571_72572_72573_72574_72575_72576_72577_72578_72579_72580_72581_72582_72583_72584_72585_72586_72587_72588_72589_72590_72591_72592_72593_72594_72595_72596_72597_72598_72599_72600_72601_72602_72603_72604_72605_72606_72607_72608_72609_72610_72611_72612_72613_72614_72615_72616_72617_72618_72619_72620_72621_72622_72623_72624_72625_72626_72627_72628_72629_72630_72631_72632_72633_72634_72635_72636_72637_72638_72639_72640_72641_72642_72643_72644_72645_72646_72647_72648_72649_72650_72651_72652_72653_72654_72655_72656_72657_72658_72659_72660_72661_72662_72663_72664_72665_72666_72667_72668_72669_72670_72671_72672_72673_72674_72675_72676_72677_72678_72679_72680_72681_72682_72683_72684_72685_72686_72687_72688_72689_72690_72691_72692_72693_72694_72695_72696_72697_72698_72699_72700_72701_72702_72703_72704_72705_72706_72707_72708_72709_72710_72711_72712_72713_72714_72715_72716_72717_72718_72719_72720_72721_72722_72723_72724_72725_72726_72727_72728_72729_72730_72731_72732_72733_72734_72735_72736_72737_72738_72739_72740_72741_72742_72743_72744_72745_72746_72747_72748_72749_72750_72751_72752_72753_72754_72755_72756_72757_72758_72759_72760_72761_72762_72763_72764_72765_72766_72767_72768_72769_72770_72771_72772_72773_72774_72775_72776_72777_72778_72779_72780_72781_72782_72783_72784_72785_72786_72787_72788_72789_72790_72791_72792_72793_72794_72795_72796_72797_72798_72799_72800_72801_72802_72803_72804_72805_72806_72807_72808_72809_72810_72811_72812_72813_72814_72815_72816_72817_72818_72819_72820_72821_72822_72823_72824_72825_72826_72827_72828_72829_72830_72831_72832_72833_72834_72835_72836_72837_72838_72839_72840_72841_72842_72843_72844_72845_72846_72847_72848_72849_72850_72851_72852_72853_72854_72855_72856_72857_72858_72859_72860_72861_72862_72863_72864_72865_72866_72867_72868_72869_72870_72871_72872_72873_72874_72875_72876_72877_72878_72879_72880_72881_72882_72883_72884_72885_72886_72887_72888_72889_72890_72891_72892_72893_72894_72895_72896_72897_72898_72899_72900_72901_72902_72903_72904_72905_72906_72907_72908_72909_72910_72911_72912_72913_72914_72915_72916_72917_72918_72919_72920_72921_72922_72923_72924_72925_72926_72927_72928_72929_72930_72931_72932_72933_72934_72935_72936_72937_72938_72939_72940_72941_72942_72943_72944_72945_72946_72947_72948_72949_72950_72951_72952_72953_72954_72955_72956_72957_72958_72959_72960_72961_72962_72963_72964_72965_72966_72967_72968_72969_72970_72971_72972_72973_72974_72975_72976_72977_72978_72979_72980_72981_72982_72983_72984_72985_72986_72987_72988_72989_72990_72991_72992_72993_72994_72995_72996_72997_72998_72999_73000_73001_73002_73003_73004_73005_73006_73007_73008_73009_73010_73011_73012_73013_73014_73015_73016_73017_73018_73019_73020_73021_73022_73023_73024_73025_73026_73027_73028_73029_73030_73031_73032_73033_73034_73035_73036_73037_73038_73039_73040_73041_73042_73043_73044_73045_73046_73047_73048_73049_73050_73051_73052_73053_73054_73055_73056_73057_73058_73059_73060_73061_73062_73063_73064_73065_73066_73067_73068_73069_73070_73071_73072_73073_73074_73075_73076_73077_73078_73079_73080_73081_73082_73083_73084_73085_73086_73087_73088_73089_73090_73091_73092_73093_73094_73095_73096_73097_73098_73099_73100_73101_73102_73103_73104_73105_73106_73107_73108_73109_73110_73111_73112_73113_73114_73115_73116_73117_73118_73119_73120_73121_73122_73123_73124_73125_73126_73127_73128_73129_73130_73131_73132_73133_73134_73135_73136_73137_73138_73139_73140_73141_73142_73143_73144_73145_73146_73147_73148_73149_73150_73151_73152_73153_73154_73155_73156_73157_73158_73159_73160_73161_73162_73163_73164_73165_73166_73167_73168_73169_73170_73171_73172_73173_73174_73175_73176_73177_73178_73179_73180_73181_73182_73183_73184_73185_73186_73187_73188_73189_73190_73191_73192_73193_73194_73195_73196_73197_73198_73199_73200_73201_73202_73203_73204_73205_73206_73207_73208_73209_73210_73211_73212_73213_73214_73215_73216_73217_73218_73219_73220_73221_73222_73223_73224_73225_73226_73227_73228_73229_73230_73231_73232_73233_73234_73235_73236_73237_73238_73239_73240_73241_73242_73243_73244_73245_73246_73247_73248_73249_73250_73251_73252_73253_73254_73255_73256_73257_73258_73259_73260_73261_73262_73263_73264_73265_73266_73267_73268_73269_73270_73271_73272_73273_73274_73275_73276_73277_73278_73279_73280_73281_73282_73283_73284_73285_73286_73287_73288_73289_73290_73291_73292_73293_73294_73295_73296_73297_73298_73299_73300_73301_73302_73303_73304_73305_73306_73307_73308_73309_73310_73311_73312_73313_73314_73315_73316_73317_73318_73319_73320_73321_73322_73323_73324_73325_73326_73327_73328_73329_73330_73331_73332_73333_73334_73335_73336_73337_73338_73339_73340_73341_73342_73343_73344_73345_73346_73347_73348_73349_73350_73351_73352_73353_73354_73355_73356_73357_73358_73359_73360_73361_73362_73363_73364_73365_73366_73367_73368_73369_73370_73371_73372_73373_73374_73375_73376_73377_73378_73379_73380_73381_73382_73383_73384_73385_73386_73387_73388_73389_73390_73391_73392_73393_73394_73395_73396_73397_73398_73399_73400_73401_73402_73403_73404_73405_73406_73407_73408_73409_73410_73411_73412_73413_73414_73415_73416_73417_73418_73419_73420_73421_73422_73423_73424_73425_73426_73427_73428_73429_73430_73431_73432_73433_73434_73435_73436_73437_73438_73439_73440_73441_73442_73443_73444_73445_73446_73447_73448_73449_73450_73451_73452_73453_73454_73455_73456_73457_73458_73459_73460_73461_73462_73463_73464_73465_73466_73467_73468_73469_73470_73471_73472_73473_73474_73475_73476_73477_73478_73479_73480_73481_73482_73483_73484_73485_73486_73487_73488_73489_73490_73491_73492_73493_73494_73495_73496_73497_73498_73499_73500_73501_73502_73503_73504_73505_73506_73507_73508_73509_73510_73511_73512_73513_73514_73515_73516_73517_73518_73519_73520_73521_73522_73523_73524_73525_73526_73527_73528_73529_73530_73531_73532_73533_73534_73535_73536_73537_73538_73539_73540_73541_73542_73543_73544_73545_73546_73547_73548_73549_73550_73551_73552_73553_73554_73555_73556_73557_73558_73559_73560_73561_73562_73563_73564_73565_73566_73567_73568_73569_73570_73571_73572_73573_73574_73575_73576_73577_73578_73579_73580_73581_73582_73583_73584_73585_73586_73587_73588_73589_73590_73591_73592_73593_73594_73595_73596_73597_73598_73599_73600_73601_73602_73603_73604_73605_73606_73607_73608_73609_73610_73611_73612_73613_73614_73615_73616_73617_73618_73619_73620_73621_73622_73623_73624_73625_73626_73627_73628_73629_73630_73631_73632_73633_73634_73635_73636_73637_73638_73639_73640_73641_73642_73643_73644_73645_73646_73647_73648_73649_73650_73651_73652_73653_73654_73655_73656_73657_73658_73659_73660_73661_73662_73663_73664_73665_73666_73667_73668_73669_73670_73671_73672_73673_73674_73675_73676_73677_73678_73679_73680_73681_73682_73683_73684_73685_73686_73687_73688_73689_73690_73691_73692_73693_73694_73695_73696_73697_73698_73699_73700_73701_73702_73703_73704_73705_73706_73707_73708_73709_73710_73711_73712_73713_73714_73715_73716_73717_73718_73719_73720_73721_73722_73723_73724_73725_73726_73727_73728_73729_73730_73731_73732_73733_73734_73735_73736_73737_73738_73739_73740_73741_73742_73743_73744_73745_73746_73747_73748_73749_73750_73751_73752_73753_73754_73755_73756_73757_73758_73759_73760_73761_73762_73763_73764_73765_73766_73767_73768_73769_73770_73771_73772_73773_73774_73775_73776_73777_73778_73779_73780_73781_73782_73783_73784_73785_73786_73787_73788_73789_73790_73791_73792_73793_73794_73795_73796_73797_73798_73799_73800_73801_73802_73803_73804_73805_73806_73807_73808_73809_73810_73811_73812_73813_73814_73815_73816_73817_73818_73819_73820_73821_73822_73823_73824_73825_73826_73827_73828_73829_73830_73831_73832_73833_73834_73835_73836_73837_73838_73839_73840_73841_73842_73843_73844_73845_73846_73847_73848_73849_73850_73851_73852_73853_73854_73855_73856_73857_73858_73859_73860_73861_73862_73863_73864_73865_73866_73867_73868_73869_73870_73871_73872_73873_73874_73875_73876_73877_73878_73879_73880_73881_73882_73883_73884_73885_73886_73887_73888_73889_73890_73891_73892_73893_73894_73895_73896_73897_73898_73899_73900_73901_73902_73903_73904_73905_73906_73907_73908_73909_73910_73911_73912_73913_73914_73915_73916_73917_73918_73919_73920_73921_73922_73923_73924_73925_73926_73927_73928_73929_73930_73931_73932_73933_73934_73935_73936_73937_73938_73939_73940_73941_73942_73943_73944_73945_73946_73947_73948_73949_73950_73951_73952_73953_73954_73955_73956_73957_73958_73959_73960_73961_73962_73963_73964_73965_73966_73967_73968_73969_73970_73971_73972_73973_73974_73975_73976_73977_73978_73979_73980_73981_73982_73983_73984_73985_73986_73987_73988_73989_73990_73991_73992_73993_73994_73995_73996_73997_73998_73999_74000_74001_74002_74003_74004_74005_74006_74007_74008_74009_74010_74011_74012_74013_74014_74015_74016_74017_74018_74019_74020_74021_74022_74023_74024_74025_74026_74027_74028_74029_74030_74031_74032_74033_74034_74035_74036_74037_74038_74039_74040_74041_74042_74043_74044_74045_74046_74047_74048_74049_74050_74051_74052_74053_74054_74055_74056_74057_74058_74059_74060_74061_74062_74063_74064_74065_74066_74067_74068_74069_74070_74071_74072_74073_74074_74075_74076_74077_74078_74079_74080_74081_74082_74083_74084_74085_74086_74087_74088_74089_74090_74091_74092_74093_74094_74095_74096_74097_74098_74099_74100_74101_74102_74103_74104_74105_74106_74107_74108_74109_74110_74111_74112_74113_74114_74115_74116_74117_74118_74119_74120_74121_74122_74123_74124_74125_74126_74127_74128_74129_74130_74131_74132_74133_74134_74135_74136_74137_74138_74139_74140_74141_74142_74143_74144_74145_74146_74147_74148_74149_74150_74151_74152_74153_74154_74155_74156_74157_74158_74159_74160_74161_74162_74163_74164_74165_74166_74167_74168_74169_74170_74171_74172_74173_74174_74175_74176_74177_74178_74179_74180_74181_74182_74183_74184_74185_74186_74187_74188_74189_74190_74191_74192_74193_74194_74195_74196_74197_74198_74199_74200_74201_74202_74203_74204_74205_74206_74207_74208_74209_74210_74211_74212_74213_74214_74215_74216_74217_74218_74219_74220_74221_74222_74223_74224_74225_74226_74227_74228_74229_74230_74231_74232_74233_74234_74235_74236_74237_74238_74239_74240_74241_74242_74243_74244_74245_74246_74247_74248_74249_74250_74251_74252_74253_74254_74255_74256_74257_74258_74259_74260_74261_74262_74263_74264_74265_74266_74267_74268_74269_74270_74271_74272_74273_74274_74275_74276_74277_74278_74279_74280_74281_74282_74283_74284_74285_74286_74287_74288_74289_74290_74291_74292_74293_74294_74295_74296_74297_74298_74299_74300_74301_74302_74303_74304_74305_74306_74307_74308_74309_74310_74311_74312_74313_74314_74315_74316_74317_74318_74319_74320_74321_74322_74323_74324_74325_74326_74327_74328_74329_74330_74331_74332_74333_74334_74335_74336_74337_74338_74339_74340_74341_74342_74343_74344_74345_74346_74347_74348_74349_74350_74351_74352_74353_74354_74355_74356_74357_74358_74359_74360_74361_74362_74363_74364_74365_74366_74367_74368_74369_74370_74371_74372_74373_74374_74375_74376_74377_74378_74379_74380_74381_74382_74383_74384_74385_74386_74387_74388_74389_74390_74391_74392_74393_74394_74395_74396_74397_74398_74399_74400_74401_74402_74403_74404_74405_74406_74407_74408_74409_74410_74411_74412_74413_74414_74415_74416_74417_74418_74419_74420_74421_74422_74423_74424_74425_74426_74427_74428_74429_74430_74431_74432_74433_74434_74435_74436_74437_74438_74439_74440_74441_74442_74443_74444_74445_74446_74447_74448_74449_74450_74451_74452_74453_74454_74455_74456_74457_74458_74459_74460_74461_74462_74463_74464_74465_74466_74467_74468_74469_74470_74471_74472_74473_74474_74475_74476_74477_74478_74479_74480_74481_74482_74483_74484_74485_74486_74487_74488_74489_74490_74491_74492_74493_74494_74495_74496_74497_74498_74499_74500_74501_74502_74503_74504_74505_74506_74507_74508_74509_74510_74511_74512_74513_74514_74515_74516_74517_74518_74519_74520_74521_74522_74523_74524_74525_74526_74527_74528_74529_74530_74531_74532_74533_74534_74535_74536_74537_74538_74539_74540_74541_74542_74543_74544_74545_74546_74547_74548_74549_74550_74551_74552_74553_74554_74555_74556_74557_74558_74559_74560_74561_74562_74563_74564_74565_74566_74567_74568_74569_74570_74571_74572_74573_74574_74575_74576_74577_74578_74579_74580_74581_74582_74583_74584_74585_74586_74587_74588_74589_74590_74591_74592_74593_74594_74595_74596_74597_74598_74599_74600_74601_74602_74603_74604_74605_74606_74607_74608_74609_74610_74611_74612_74613_74614_74615_74616_74617_74618_74619_74620_74621_74622_74623_74624_74625_74626_74627_74628_74629_74630_74631_74632_74633_74634_74635_74636_74637_74638_74639_74640_74641_74642_74643_74644_74645_74646_74647_74648_74649_74650_74651_74652_74653_74654_74655_74656_74657_74658_74659_74660_74661_74662_74663_74664_74665_74666_74667_74668_74669_74670_74671_74672_74673_74674_74675_74676_74677_74678_74679_74680_74681_74682_74683_74684_74685_74686_74687_74688_74689_74690_74691_74692_74693_74694_74695_74696_74697_74698_74699_74700_74701_74702_74703_74704_74705_74706_74707_74708_74709_74710_74711_74712_74713_74714_74715_74716_74717_74718_74719_74720_74721_74722_74723_74724_74725_74726_74727_74728_74729_74730_74731_74732_74733_74734_74735_74736_74737_74738_74739_74740_74741_74742_74743_74744_74745_74746_74747_74748_74749_74750_74751_74752_74753_74754_74755_74756_74757_74758_74759_74760_74761_74762_74763_74764_74765_74766_74767_74768_74769_74770_74771_74772_74773_74774_74775_74776_74777_74778_74779_74780_74781_74782_74783_74784_74785_74786_74787_74788_74789_74790_74791_74792_74793_74794_74795_74796_74797_74798_74799_74800_74801_74802_74803_74804_74805_74806_74807_74808_74809_74810_74811_74812_74813_74814_74815_74816_74817_74818_74819_74820_74821_74822_74823_74824_74825_74826_74827_74828_74829_74830_74831_74832_74833_74834_74835_74836_74837_74838_74839_74840_74841_74842_74843_74844_74845_74846_74847_74848_74849_74850_74851_74852_74853_74854_74855_74856_74857_74858_74859_74860_74861_74862_74863_74864_74865_74866_74867_74868_74869_74870_74871_74872_74873_74874_74875_74876_74877_74878_74879_74880_74881_74882_74883_74884_74885_74886_74887_74888_74889_74890_74891_74892_74893_74894_74895_74896_74897_74898_74899_74900_74901_74902_74903_74904_74905_74906_74907_74908_74909_74910_74911_74912_74913_74914_74915_74916_74917_74918_74919_74920_74921_74922_74923_74924_74925_74926_74927_74928_74929_74930_74931_74932_74933_74934_74935_74936_74937_74938_74939_74940_74941_74942_74943_74944_74945_74946_74947_74948_74949_74950_74951_74952_74953_74954_74955_74956_74957_74958_74959_74960_74961_74962_74963_74964_74965_74966_74967_74968_74969_74970_74971_74972_74973_74974_74975_74976_74977_74978_74979_74980_74981_74982_74983_74984_74985_74986_74987_74988_74989_74990_74991_74992_74993_74994_74995_74996_74997_74998_74999_75000_75001_75002_75003_75004_75005_75006_75007_75008_75009_75010_75011_75012_75013_75014_75015_75016_75017_75018_75019_75020_75021_75022_75023_75024_75025_75026_75027_75028_75029_75030_75031_75032_75033_75034_75035_75036_75037_75038_75039_75040_75041_75042_75043_75044_75045_75046_75047_75048_75049_75050_75051_75052_75053_75054_75055_75056_75057_75058_75059_75060_75061_75062_75063_75064_75065_75066_75067_75068_75069_75070_75071_75072_75073_75074_75075_75076_75077_75078_75079_75080_75081_75082_75083_75084_75085_75086_75087_75088_75089_75090_75091_75092_75093_75094_75095_75096_75097_75098_75099_75100_75101_75102_75103_75104_75105_75106_75107_75108_75109_75110_75111_75112_75113_75114_75115_75116_75117_75118_75119_75120_75121_75122_75123_75124_75125_75126_75127_75128_75129_75130_75131_75132_75133_75134_75135_75136_75137_75138_75139_75140_75141_75142_75143_75144_75145_75146_75147_75148_75149_75150_75151_75152_75153_75154_75155_75156_75157_75158_75159_75160_75161_75162_75163_75164_75165_75166_75167_75168_75169_75170_75171_75172_75173_75174_75175_75176_75177_75178_75179_75180_75181_75182_75183_75184_75185_75186_75187_75188_75189_75190_75191_75192_75193_75194_75195_75196_75197_75198_75199_75200_75201_75202_75203_75204_75205_75206_75207_75208_75209_75210_75211_75212_75213_75214_75215_75216_75217_75218_75219_75220_75221_75222_75223_75224_75225_75226_75227_75228_75229_75230_75231_75232_75233_75234_75235_75236_75237_75238_75239_75240_75241_75242_75243_75244_75245_75246_75247_75248_75249_75250_75251_75252_75253_75254_75255_75256_75257_75258_75259_75260_75261_75262_75263_75264_75265_75266_75267_75268_75269_75270_75271_75272_75273_75274_75275_75276_75277_75278_75279_75280_75281_75282_75283_75284_75285_75286_75287_75288_75289_75290_75291_75292_75293_75294_75295_75296_75297_75298_75299_75300_75301_75302_75303_75304_75305_75306_75307_75308_75309_75310_75311_75312_75313_75314_75315_75316_75317_75318_75319_75320_75321_75322_75323_75324_75325_75326_75327_75328_75329_75330_75331_75332_75333_75334_75335_75336_75337_75338_75339_75340_75341_75342_75343_75344_75345_75346_75347_75348_75349_75350_75351_75352_75353_75354_75355_75356_75357_75358_75359_75360_75361_75362_75363_75364_75365_75366_75367_75368_75369_75370_75371_75372_75373_75374_75375_75376_75377_75378_75379_75380_75381_75382_75383_75384_75385_75386_75387_75388_75389_75390_75391_75392_75393_75394_75395_75396_75397_75398_75399_75400_75401_75402_75403_75404_75405_75406_75407_75408_75409_75410_75411_75412_75413_75414_75415_75416_75417_75418_75419_75420_75421_75422_75423_75424_75425_75426_75427_75428_75429_75430_75431_75432_75433_75434_75435_75436_75437_75438_75439_75440_75441_75442_75443_75444_75445_75446_75447_75448_75449_75450_75451_75452_75453_75454_75455_75456_75457_75458_75459_75460_75461_75462_75463_75464_75465_75466_75467_75468_75469_75470_75471_75472_75473_75474_75475_75476_75477_75478_75479_75480_75481_75482_75483_75484_75485_75486_75487_75488_75489_75490_75491_75492_75493_75494_75495_75496_75497_75498_75499_75500_75501_75502_75503_75504_75505_75506_75507_75508_75509_75510_75511_75512_75513_75514_75515_75516_75517_75518_75519_75520_75521_75522_75523_75524_75525_75526_75527_75528_75529_75530_75531_75532_75533_75534_75535_75536_75537_75538_75539_75540_75541_75542_75543_75544_75545_75546_75547_75548_75549_75550_75551_75552_75553_75554_75555_75556_75557_75558_75559_75560_75561_75562_75563_75564_75565_75566_75567_75568_75569_75570_75571_75572_75573_75574_75575_75576_75577_75578_75579_75580_75581_75582_75583_75584_75585_75586_75587_75588_75589_75590_75591_75592_75593_75594_75595_75596_75597_75598_75599_75600_75601_75602_75603_75604_75605_75606_75607_75608_75609_75610_75611_75612_75613_75614_75615_75616_75617_75618_75619_75620_75621_75622_75623_75624_75625_75626_75627_75628_75629_75630_75631_75632_75633_75634_75635_75636_75637_75638_75639_75640_75641_75642_75643_75644_75645_75646_75647_75648_75649_75650_75651_75652_75653_75654_75655_75656_75657_75658_75659_75660_75661_75662_75663_75664_75665_75666_75667_75668_75669_75670_75671_75672_75673_75674_75675_75676_75677_75678_75679_75680_75681_75682_75683_75684_75685_75686_75687_75688_75689_75690_75691_75692_75693_75694_75695_75696_75697_75698_75699_75700_75701_75702_75703_75704_75705_75706_75707_75708_75709_75710_75711_75712_75713_75714_75715_75716_75717_75718_75719_75720_75721_75722_75723_75724_75725_75726_75727_75728_75729_75730_75731_75732_75733_75734_75735_75736_75737_75738_75739_75740_75741_75742_75743_75744_75745_75746_75747_75748_75749_75750_75751_75752_75753_75754_75755_75756_75757_75758_75759_75760_75761_75762_75763_75764_75765_75766_75767_75768_75769_75770_75771_75772_75773_75774_75775_75776_75777_75778_75779_75780_75781_75782_75783_75784_75785_75786_75787_75788_75789_75790_75791_75792_75793_75794_75795_75796_75797_75798_75799_75800_75801_75802_75803_75804_75805_75806_75807_75808_75809_75810_75811_75812_75813_75814_75815_75816_75817_75818_75819_75820_75821_75822_75823_75824_75825_75826_75827_75828_75829_75830_75831_75832_75833_75834_75835_75836_75837_75838_75839_75840_75841_75842_75843_75844_75845_75846_75847_75848_75849_75850_75851_75852_75853_75854_75855_75856_75857_75858_75859_75860_75861_75862_75863_75864_75865_75866_75867_75868_75869_75870_75871_75872_75873_75874_75875_75876_75877_75878_75879_75880_75881_75882_75883_75884_75885_75886_75887_75888_75889_75890_75891_75892_75893_75894_75895_75896_75897_75898_75899_75900_75901_75902_75903_75904_75905_75906_75907_75908_75909_75910_75911_75912_75913_75914_75915_75916_75917_75918_75919_75920_75921_75922_75923_75924_75925_75926_75927_75928_75929_75930_75931_75932_75933_75934_75935_75936_75937_75938_75939_75940_75941_75942_75943_75944_75945_75946_75947_75948_75949_75950_75951_75952_75953_75954_75955_75956_75957_75958_75959_75960_75961_75962_75963_75964_75965_75966_75967_75968_75969_75970_75971_75972_75973_75974_75975_75976_75977_75978_75979_75980_75981_75982_75983_75984_75985_75986_75987_75988_75989_75990_75991_75992_75993_75994_75995_75996_75997_75998_75999_76000_76001_76002_76003_76004_76005_76006_76007_76008_76009_76010_76011_76012_76013_76014_76015_76016_76017_76018_76019_76020_76021_76022_76023_76024_76025_76026_76027_76028_76029_76030_76031_76032_76033_76034_76035_76036_76037_76038_76039_76040_76041_76042_76043_76044_76045_76046_76047_76048_76049_76050_76051_76052_76053_76054_76055_76056_76057_76058_76059_76060_76061_76062_76063_76064_76065_76066_76067_76068_76069_76070_76071_76072_76073_76074_76075_76076_76077_76078_76079_76080_76081_76082_76083_76084_76085_76086_76087_76088_76089_76090_76091_76092_76093_76094_76095_76096_76097_76098_76099_76100_76101_76102_76103_76104_76105_76106_76107_76108_76109_76110_76111_76112_76113_76114_76115_76116_76117_76118_76119_76120_76121_76122_76123_76124_76125_76126_76127_76128_76129_76130_76131_76132_76133_76134_76135_76136_76137_76138_76139_76140_76141_76142_76143_76144_76145_76146_76147_76148_76149_76150_76151_76152_76153_76154_76155_76156_76157_76158_76159_76160_76161_76162_76163_76164_76165_76166_76167_76168_76169_76170_76171_76172_76173_76174_76175_76176_76177_76178_76179_76180_76181_76182_76183_76184_76185_76186_76187_76188_76189_76190_76191_76192_76193_76194_76195_76196_76197_76198_76199_76200_76201_76202_76203_76204_76205_76206_76207_76208_76209_76210_76211_76212_76213_76214_76215_76216_76217_76218_76219_76220_76221_76222_76223_76224_76225_76226_76227_76228_76229_76230_76231_76232_76233_76234_76235_76236_76237_76238_76239_76240_76241_76242_76243_76244_76245_76246_76247_76248_76249_76250_76251_76252_76253_76254_76255_76256_76257_76258_76259_76260_76261_76262_76263_76264_76265_76266_76267_76268_76269_76270_76271_76272_76273_76274_76275_76276_76277_76278_76279_76280_76281_76282_76283_76284_76285_76286_76287_76288_76289_76290_76291_76292_76293_76294_76295_76296_76297_76298_76299_76300_76301_76302_76303_76304_76305_76306_76307_76308_76309_76310_76311_76312_76313_76314_76315_76316_76317_76318_76319_76320_76321_76322_76323_76324_76325_76326_76327_76328_76329_76330_76331_76332_76333_76334_76335_76336_76337_76338_76339_76340_76341_76342_76343_76344_76345_76346_76347_76348_76349_76350_76351_76352_76353_76354_76355_76356_76357_76358_76359_76360_76361_76362_76363_76364_76365_76366_76367_76368_76369_76370_76371_76372_76373_76374_76375_76376_76377_76378_76379_76380_76381_76382_76383_76384_76385_76386_76387_76388_76389_76390_76391_76392_76393_76394_76395_76396_76397_76398_76399_76400_76401_76402_76403_76404_76405_76406_76407_76408_76409_76410_76411_76412_76413_76414_76415_76416_76417_76418_76419_76420_76421_76422_76423_76424_76425_76426_76427_76428_76429_76430_76431_76432_76433_76434_76435_76436_76437_76438_76439_76440_76441_76442_76443_76444_76445_76446_76447_76448_76449_76450_76451_76452_76453_76454_76455_76456_76457_76458_76459_76460_76461_76462_76463_76464_76465_76466_76467_76468_76469_76470_76471_76472_76473_76474_76475_76476_76477_76478_76479_76480_76481_76482_76483_76484_76485_76486_76487_76488_76489_76490_76491_76492_76493_76494_76495_76496_76497_76498_76499_76500_76501_76502_76503_76504_76505_76506_76507_76508_76509_76510_76511_76512_76513_76514_76515_76516_76517_76518_76519_76520_76521_76522_76523_76524_76525_76526_76527_76528_76529_76530_76531_76532_76533_76534_76535_76536_76537_76538_76539_76540_76541_76542_76543_76544_76545_76546_76547_76548_76549_76550_76551_76552_76553_76554_76555_76556_76557_76558_76559_76560_76561_76562_76563_76564_76565_76566_76567_76568_76569_76570_76571_76572_76573_76574_76575_76576_76577_76578_76579_76580_76581_76582_76583_76584_76585_76586_76587_76588_76589_76590_76591_76592_76593_76594_76595_76596_76597_76598_76599_76600_76601_76602_76603_76604_76605_76606_76607_76608_76609_76610_76611_76612_76613_76614_76615_76616_76617_76618_76619_76620_76621_76622_76623_76624_76625_76626_76627_76628_76629_76630_76631_76632_76633_76634_76635_76636_76637_76638_76639_76640_76641_76642_76643_76644_76645_76646_76647_76648_76649_76650_76651_76652_76653_76654_76655_76656_76657_76658_76659_76660_76661_76662_76663_76664_76665_76666_76667_76668_76669_76670_76671_76672_76673_76674_76675_76676_76677_76678_76679_76680_76681_76682_76683_76684_76685_76686_76687_76688_76689_76690_76691_76692_76693_76694_76695_76696_76697_76698_76699_76700_76701_76702_76703_76704_76705_76706_76707_76708_76709_76710_76711_76712_76713_76714_76715_76716_76717_76718_76719_76720_76721_76722_76723_76724_76725_76726_76727_76728_76729_76730_76731_76732_76733_76734_76735_76736_76737_76738_76739_76740_76741_76742_76743_76744_76745_76746_76747_76748_76749_76750_76751_76752_76753_76754_76755_76756_76757_76758_76759_76760_76761_76762_76763_76764_76765_76766_76767_76768_76769_76770_76771_76772_76773_76774_76775_76776_76777_76778_76779_76780_76781_76782_76783_76784_76785_76786_76787_76788_76789_76790_76791_76792_76793_76794_76795_76796_76797_76798_76799_76800_76801_76802_76803_76804_76805_76806_76807_76808_76809_76810_76811_76812_76813_76814_76815_76816_76817_76818_76819_76820_76821_76822_76823_76824_76825_76826_76827_76828_76829_76830_76831_76832_76833_76834_76835_76836_76837_76838_76839_76840_76841_76842_76843_76844_76845_76846_76847_76848_76849_76850_76851_76852_76853_76854_76855_76856_76857_76858_76859_76860_76861_76862_76863_76864_76865_76866_76867_76868_76869_76870_76871_76872_76873_76874_76875_76876_76877_76878_76879_76880_76881_76882_76883_76884_76885_76886_76887_76888_76889_76890_76891_76892_76893_76894_76895_76896_76897_76898_76899_76900_76901_76902_76903_76904_76905_76906_76907_76908_76909_76910_76911_76912_76913_76914_76915_76916_76917_76918_76919_76920_76921_76922_76923_76924_76925_76926_76927_76928_76929_76930_76931_76932_76933_76934_76935_76936_76937_76938_76939_76940_76941_76942_76943_76944_76945_76946_76947_76948_76949_76950_76951_76952_76953_76954_76955_76956_76957_76958_76959_76960_76961_76962_76963_76964_76965_76966_76967_76968_76969_76970_76971_76972_76973_76974_76975_76976_76977_76978_76979_76980_76981_76982_76983_76984_76985_76986_76987_76988_76989_76990_76991_76992_76993_76994_76995_76996_76997_76998_76999_77000_77001_77002_77003_77004_77005_77006_77007_77008_77009_77010_77011_77012_77013_77014_77015_77016_77017_77018_77019_77020_77021_77022_77023_77024_77025_77026_77027_77028_77029_77030_77031_77032_77033_77034_77035_77036_77037_77038_77039_77040_77041_77042_77043_77044_77045_77046_77047_77048_77049_77050_77051_77052_77053_77054_77055_77056_77057_77058_77059_77060_77061_77062_77063_77064_77065_77066_77067_77068_77069_77070_77071_77072_77073_77074_77075_77076_77077_77078_77079_77080_77081_77082_77083_77084_77085_77086_77087_77088_77089_77090_77091_77092_77093_77094_77095_77096_77097_77098_77099_77100_77101_77102_77103_77104_77105_77106_77107_77108_77109_77110_77111_77112_77113_77114_77115_77116_77117_77118_77119_77120_77121_77122_77123_77124_77125_77126_77127_77128_77129_77130_77131_77132_77133_77134_77135_77136_77137_77138_77139_77140_77141_77142_77143_77144_77145_77146_77147_77148_77149_77150_77151_77152_77153_77154_77155_77156_77157_77158_77159_77160_77161_77162_77163_77164_77165_77166_77167_77168_77169_77170_77171_77172_77173_77174_77175_77176_77177_77178_77179_77180_77181_77182_77183_77184_77185_77186_77187_77188_77189_77190_77191_77192_77193_77194_77195_77196_77197_77198_77199_77200_77201_77202_77203_77204_77205_77206_77207_77208_77209_77210_77211_77212_77213_77214_77215_77216_77217_77218_77219_77220_77221_77222_77223_77224_77225_77226_77227_77228_77229_77230_77231_77232_77233_77234_77235_77236_77237_77238_77239_77240_77241_77242_77243_77244_77245_77246_77247_77248_77249_77250_77251_77252_77253_77254_77255_77256_77257_77258_77259_77260_77261_77262_77263_77264_77265_77266_77267_77268_77269_77270_77271_77272_77273_77274_77275_77276_77277_77278_77279_77280_77281_77282_77283_77284_77285_77286_77287_77288_77289_77290_77291_77292_77293_77294_77295_77296_77297_77298_77299_77300_77301_77302_77303_77304_77305_77306_77307_77308_77309_77310_77311_77312_77313_77314_77315_77316_77317_77318_77319_77320_77321_77322_77323_77324_77325_77326_77327_77328_77329_77330_77331_77332_77333_77334_77335_77336_77337_77338_77339_77340_77341_77342_77343_77344_77345_77346_77347_77348_77349_77350_77351_77352_77353_77354_77355_77356_77357_77358_77359_77360_77361_77362_77363_77364_77365_77366_77367_77368_77369_77370_77371_77372_77373_77374_77375_77376_77377_77378_77379_77380_77381_77382_77383_77384_77385_77386_77387_77388_77389_77390_77391_77392_77393_77394_77395_77396_77397_77398_77399_77400_77401_77402_77403_77404_77405_77406_77407_77408_77409_77410_77411_77412_77413_77414_77415_77416_77417_77418_77419_77420_77421_77422_77423_77424_77425_77426_77427_77428_77429_77430_77431_77432_77433_77434_77435_77436_77437_77438_77439_77440_77441_77442_77443_77444_77445_77446_77447_77448_77449_77450_77451_77452_77453_77454_77455_77456_77457_77458_77459_77460_77461_77462_77463_77464_77465_77466_77467_77468_77469_77470_77471_77472_77473_77474_77475_77476_77477_77478_77479_77480_77481_77482_77483_77484_77485_77486_77487_77488_77489_77490_77491_77492_77493_77494_77495_77496_77497_77498_77499_77500_77501_77502_77503_77504_77505_77506_77507_77508_77509_77510_77511_77512_77513_77514_77515_77516_77517_77518_77519_77520_77521_77522_77523_77524_77525_77526_77527_77528_77529_77530_77531_77532_77533_77534_77535_77536_77537_77538_77539_77540_77541_77542_77543_77544_77545_77546_77547_77548_77549_77550_77551_77552_77553_77554_77555_77556_77557_77558_77559_77560_77561_77562_77563_77564_77565_77566_77567_77568_77569_77570_77571_77572_77573_77574_77575_77576_77577_77578_77579_77580_77581_77582_77583_77584_77585_77586_77587_77588_77589_77590_77591_77592_77593_77594_77595_77596_77597_77598_77599_77600_77601_77602_77603_77604_77605_77606_77607_77608_77609_77610_77611_77612_77613_77614_77615_77616_77617_77618_77619_77620_77621_77622_77623_77624_77625_77626_77627_77628_77629_77630_77631_77632_77633_77634_77635_77636_77637_77638_77639_77640_77641_77642_77643_77644_77645_77646_77647_77648_77649_77650_77651_77652_77653_77654_77655_77656_77657_77658_77659_77660_77661_77662_77663_77664_77665_77666_77667_77668_77669_77670_77671_77672_77673_77674_77675_77676_77677_77678_77679_77680_77681_77682_77683_77684_77685_77686_77687_77688_77689_77690_77691_77692_77693_77694_77695_77696_77697_77698_77699_77700_77701_77702_77703_77704_77705_77706_77707_77708_77709_77710_77711_77712_77713_77714_77715_77716_77717_77718_77719_77720_77721_77722_77723_77724_77725_77726_77727_77728_77729_77730_77731_77732_77733_77734_77735_77736_77737_77738_77739_77740_77741_77742_77743_77744_77745_77746_77747_77748_77749_77750_77751_77752_77753_77754_77755_77756_77757_77758_77759_77760_77761_77762_77763_77764_77765_77766_77767_77768_77769_77770_77771_77772_77773_77774_77775_77776_77777_77778_77779_77780_77781_77782_77783_77784_77785_77786_77787_77788_77789_77790_77791_77792_77793_77794_77795_77796_77797_77798_77799_77800_77801_77802_77803_77804_77805_77806_77807_77808_77809_77810_77811_77812_77813_77814_77815_77816_77817_77818_77819_77820_77821_77822_77823_77824_77825_77826_77827_77828_77829_77830_77831_77832_77833_77834_77835_77836_77837_77838_77839_77840_77841_77842_77843_77844_77845_77846_77847_77848_77849_77850_77851_77852_77853_77854_77855_77856_77857_77858_77859_77860_77861_77862_77863_77864_77865_77866_77867_77868_77869_77870_77871_77872_77873_77874_77875_77876_77877_77878_77879_77880_77881_77882_77883_77884_77885_77886_77887_77888_77889_77890_77891_77892_77893_77894_77895_77896_77897_77898_77899_77900_77901_77902_77903_77904_77905_77906_77907_77908_77909_77910_77911_77912_77913_77914_77915_77916_77917_77918_77919_77920_77921_77922_77923_77924_77925_77926_77927_77928_77929_77930_77931_77932_77933_77934_77935_77936_77937_77938_77939_77940_77941_77942_77943_77944_77945_77946_77947_77948_77949_77950_77951_77952_77953_77954_77955_77956_77957_77958_77959_77960_77961_77962_77963_77964_77965_77966_77967_77968_77969_77970_77971_77972_77973_77974_77975_77976_77977_77978_77979_77980_77981_77982_77983_77984_77985_77986_77987_77988_77989_77990_77991_77992_77993_77994_77995_77996_77997_77998_77999_78000_78001_78002_78003_78004_78005_78006_78007_78008_78009_78010_78011_78012_78013_78014_78015_78016_78017_78018_78019_78020_78021_78022_78023_78024_78025_78026_78027_78028_78029_78030_78031_78032_78033_78034_78035_78036_78037_78038_78039_78040_78041_78042_78043_78044_78045_78046_78047_78048_78049_78050_78051_78052_78053_78054_78055_78056_78057_78058_78059_78060_78061_78062_78063_78064_78065_78066_78067_78068_78069_78070_78071_78072_78073_78074_78075_78076_78077_78078_78079_78080_78081_78082_78083_78084_78085_78086_78087_78088_78089_78090_78091_78092_78093_78094_78095_78096_78097_78098_78099_78100_78101_78102_78103_78104_78105_78106_78107_78108_78109_78110_78111_78112_78113_78114_78115_78116_78117_78118_78119_78120_78121_78122_78123_78124_78125_78126_78127_78128_78129_78130_78131_78132_78133_78134_78135_78136_78137_78138_78139_78140_78141_78142_78143_78144_78145_78146_78147_78148_78149_78150_78151_78152_78153_78154_78155_78156_78157_78158_78159_78160_78161_78162_78163_78164_78165_78166_78167_78168_78169_78170_78171_78172_78173_78174_78175_78176_78177_78178_78179_78180_78181_78182_78183_78184_78185_78186_78187_78188_78189_78190_78191_78192_78193_78194_78195_78196_78197_78198_78199_78200_78201_78202_78203_78204_78205_78206_78207_78208_78209_78210_78211_78212_78213_78214_78215_78216_78217_78218_78219_78220_78221_78222_78223_78224_78225_78226_78227_78228_78229_78230_78231_78232_78233_78234_78235_78236_78237_78238_78239_78240_78241_78242_78243_78244_78245_78246_78247_78248_78249_78250_78251_78252_78253_78254_78255_78256_78257_78258_78259_78260_78261_78262_78263_78264_78265_78266_78267_78268_78269_78270_78271_78272_78273_78274_78275_78276_78277_78278_78279_78280_78281_78282_78283_78284_78285_78286_78287_78288_78289_78290_78291_78292_78293_78294_78295_78296_78297_78298_78299_78300_78301_78302_78303_78304_78305_78306_78307_78308_78309_78310_78311_78312_78313_78314_78315_78316_78317_78318_78319_78320_78321_78322_78323_78324_78325_78326_78327_78328_78329_78330_78331_78332_78333_78334_78335_78336_78337_78338_78339_78340_78341_78342_78343_78344_78345_78346_78347_78348_78349_78350_78351_78352_78353_78354_78355_78356_78357_78358_78359_78360_78361_78362_78363_78364_78365_78366_78367_78368_78369_78370_78371_78372_78373_78374_78375_78376_78377_78378_78379_78380_78381_78382_78383_78384_78385_78386_78387_78388_78389_78390_78391_78392_78393_78394_78395_78396_78397_78398_78399_78400_78401_78402_78403_78404_78405_78406_78407_78408_78409_78410_78411_78412_78413_78414_78415_78416_78417_78418_78419_78420_78421_78422_78423_78424_78425_78426_78427_78428_78429_78430_78431_78432_78433_78434_78435_78436_78437_78438_78439_78440_78441_78442_78443_78444_78445_78446_78447_78448_78449_78450_78451_78452_78453_78454_78455_78456_78457_78458_78459_78460_78461_78462_78463_78464_78465_78466_78467_78468_78469_78470_78471_78472_78473_78474_78475_78476_78477_78478_78479_78480_78481_78482_78483_78484_78485_78486_78487_78488_78489_78490_78491_78492_78493_78494_78495_78496_78497_78498_78499_78500_78501_78502_78503_78504_78505_78506_78507_78508_78509_78510_78511_78512_78513_78514_78515_78516_78517_78518_78519_78520_78521_78522_78523_78524_78525_78526_78527_78528_78529_78530_78531_78532_78533_78534_78535_78536_78537_78538_78539_78540_78541_78542_78543_78544_78545_78546_78547_78548_78549_78550_78551_78552_78553_78554_78555_78556_78557_78558_78559_78560_78561_78562_78563_78564_78565_78566_78567_78568_78569_78570_78571_78572_78573_78574_78575_78576_78577_78578_78579_78580_78581_78582_78583_78584_78585_78586_78587_78588_78589_78590_78591_78592_78593_78594_78595_78596_78597_78598_78599_78600_78601_78602_78603_78604_78605_78606_78607_78608_78609_78610_78611_78612_78613_78614_78615_78616_78617_78618_78619_78620_78621_78622_78623_78624_78625_78626_78627_78628_78629_78630_78631_78632_78633_78634_78635_78636_78637_78638_78639_78640_78641_78642_78643_78644_78645_78646_78647_78648_78649_78650_78651_78652_78653_78654_78655_78656_78657_78658_78659_78660_78661_78662_78663_78664_78665_78666_78667_78668_78669_78670_78671_78672_78673_78674_78675_78676_78677_78678_78679_78680_78681_78682_78683_78684_78685_78686_78687_78688_78689_78690_78691_78692_78693_78694_78695_78696_78697_78698_78699_78700_78701_78702_78703_78704_78705_78706_78707_78708_78709_78710_78711_78712_78713_78714_78715_78716_78717_78718_78719_78720_78721_78722_78723_78724_78725_78726_78727_78728_78729_78730_78731_78732_78733_78734_78735_78736_78737_78738_78739_78740_78741_78742_78743_78744_78745_78746_78747_78748_78749_78750_78751_78752_78753_78754_78755_78756_78757_78758_78759_78760_78761_78762_78763_78764_78765_78766_78767_78768_78769_78770_78771_78772_78773_78774_78775_78776_78777_78778_78779_78780_78781_78782_78783_78784_78785_78786_78787_78788_78789_78790_78791_78792_78793_78794_78795_78796_78797_78798_78799_78800_78801_78802_78803_78804_78805_78806_78807_78808_78809_78810_78811_78812_78813_78814_78815_78816_78817_78818_78819_78820_78821_78822_78823_78824_78825_78826_78827_78828_78829_78830_78831_78832_78833_78834_78835_78836_78837_78838_78839_78840_78841_78842_78843_78844_78845_78846_78847_78848_78849_78850_78851_78852_78853_78854_78855_78856_78857_78858_78859_78860_78861_78862_78863_78864_78865_78866_78867_78868_78869_78870_78871_78872_78873_78874_78875_78876_78877_78878_78879_78880_78881_78882_78883_78884_78885_78886_78887_78888_78889_78890_78891_78892_78893_78894_78895_78896_78897_78898_78899_78900_78901_78902_78903_78904_78905_78906_78907_78908_78909_78910_78911_78912_78913_78914_78915_78916_78917_78918_78919_78920_78921_78922_78923_78924_78925_78926_78927_78928_78929_78930_78931_78932_78933_78934_78935_78936_78937_78938_78939_78940_78941_78942_78943_78944_78945_78946_78947_78948_78949_78950_78951_78952_78953_78954_78955_78956_78957_78958_78959_78960_78961_78962_78963_78964_78965_78966_78967_78968_78969_78970_78971_78972_78973_78974_78975_78976_78977_78978_78979_78980_78981_78982_78983_78984_78985_78986_78987_78988_78989_78990_78991_78992_78993_78994_78995_78996_78997_78998_78999_79000_79001_79002_79003_79004_79005_79006_79007_79008_79009_79010_79011_79012_79013_79014_79015_79016_79017_79018_79019_79020_79021_79022_79023_79024_79025_79026_79027_79028_79029_79030_79031_79032_79033_79034_79035_79036_79037_79038_79039_79040_79041_79042_79043_79044_79045_79046_79047_79048_79049_79050_79051_79052_79053_79054_79055_79056_79057_79058_79059_79060_79061_79062_79063_79064_79065_79066_79067_79068_79069_79070_79071_79072_79073_79074_79075_79076_79077_79078_79079_79080_79081_79082_79083_79084_79085_79086_79087_79088_79089_79090_79091_79092_79093_79094_79095_79096_79097_79098_79099_79100_79101_79102_79103_79104_79105_79106_79107_79108_79109_79110_79111_79112_79113_79114_79115_79116_79117_79118_79119_79120_79121_79122_79123_79124_79125_79126_79127_79128_79129_79130_79131_79132_79133_79134_79135_79136_79137_79138_79139_79140_79141_79142_79143_79144_79145_79146_79147_79148_79149_79150_79151_79152_79153_79154_79155_79156_79157_79158_79159_79160_79161_79162_79163_79164_79165_79166_79167_79168_79169_79170_79171_79172_79173_79174_79175_79176_79177_79178_79179_79180_79181_79182_79183_79184_79185_79186_79187_79188_79189_79190_79191_79192_79193_79194_79195_79196_79197_79198_79199_79200_79201_79202_79203_79204_79205_79206_79207_79208_79209_79210_79211_79212_79213_79214_79215_79216_79217_79218_79219_79220_79221_79222_79223_79224_79225_79226_79227_79228_79229_79230_79231_79232_79233_79234_79235_79236_79237_79238_79239_79240_79241_79242_79243_79244_79245_79246_79247_79248_79249_79250_79251_79252_79253_79254_79255_79256_79257_79258_79259_79260_79261_79262_79263_79264_79265_79266_79267_79268_79269_79270_79271_79272_79273_79274_79275_79276_79277_79278_79279_79280_79281_79282_79283_79284_79285_79286_79287_79288_79289_79290_79291_79292_79293_79294_79295_79296_79297_79298_79299_79300_79301_79302_79303_79304_79305_79306_79307_79308_79309_79310_79311_79312_79313_79314_79315_79316_79317_79318_79319_79320_79321_79322_79323_79324_79325_79326_79327_79328_79329_79330_79331_79332_79333_79334_79335_79336_79337_79338_79339_79340_79341_79342_79343_79344_79345_79346_79347_79348_79349_79350_79351_79352_79353_79354_79355_79356_79357_79358_79359_79360_79361_79362_79363_79364_79365_79366_79367_79368_79369_79370_79371_79372_79373_79374_79375_79376_79377_79378_79379_79380_79381_79382_79383_79384_79385_79386_79387_79388_79389_79390_79391_79392_79393_79394_79395_79396_79397_79398_79399_79400_79401_79402_79403_79404_79405_79406_79407_79408_79409_79410_79411_79412_79413_79414_79415_79416_79417_79418_79419_79420_79421_79422_79423_79424_79425_79426_79427_79428_79429_79430_79431_79432_79433_79434_79435_79436_79437_79438_79439_79440_79441_79442_79443_79444_79445_79446_79447_79448_79449_79450_79451_79452_79453_79454_79455_79456_79457_79458_79459_79460_79461_79462_79463_79464_79465_79466_79467_79468_79469_79470_79471_79472_79473_79474_79475_79476_79477_79478_79479_79480_79481_79482_79483_79484_79485_79486_79487_79488_79489_79490_79491_79492_79493_79494_79495_79496_79497_79498_79499_79500_79501_79502_79503_79504_79505_79506_79507_79508_79509_79510_79511_79512_79513_79514_79515_79516_79517_79518_79519_79520_79521_79522_79523_79524_79525_79526_79527_79528_79529_79530_79531_79532_79533_79534_79535_79536_79537_79538_79539_79540_79541_79542_79543_79544_79545_79546_79547_79548_79549_79550_79551_79552_79553_79554_79555_79556_79557_79558_79559_79560_79561_79562_79563_79564_79565_79566_79567_79568_79569_79570_79571_79572_79573_79574_79575_79576_79577_79578_79579_79580_79581_79582_79583_79584_79585_79586_79587_79588_79589_79590_79591_79592_79593_79594_79595_79596_79597_79598_79599_79600_79601_79602_79603_79604_79605_79606_79607_79608_79609_79610_79611_79612_79613_79614_79615_79616_79617_79618_79619_79620_79621_79622_79623_79624_79625_79626_79627_79628_79629_79630_79631_79632_79633_79634_79635_79636_79637_79638_79639_79640_79641_79642_79643_79644_79645_79646_79647_79648_79649_79650_79651_79652_79653_79654_79655_79656_79657_79658_79659_79660_79661_79662_79663_79664_79665_79666_79667_79668_79669_79670_79671_79672_79673_79674_79675_79676_79677_79678_79679_79680_79681_79682_79683_79684_79685_79686_79687_79688_79689_79690_79691_79692_79693_79694_79695_79696_79697_79698_79699_79700_79701_79702_79703_79704_79705_79706_79707_79708_79709_79710_79711_79712_79713_79714_79715_79716_79717_79718_79719_79720_79721_79722_79723_79724_79725_79726_79727_79728_79729_79730_79731_79732_79733_79734_79735_79736_79737_79738_79739_79740_79741_79742_79743_79744_79745_79746_79747_79748_79749_79750_79751_79752_79753_79754_79755_79756_79757_79758_79759_79760_79761_79762_79763_79764_79765_79766_79767_79768_79769_79770_79771_79772_79773_79774_79775_79776_79777_79778_79779_79780_79781_79782_79783_79784_79785_79786_79787_79788_79789_79790_79791_79792_79793_79794_79795_79796_79797_79798_79799_79800_79801_79802_79803_79804_79805_79806_79807_79808_79809_79810_79811_79812_79813_79814_79815_79816_79817_79818_79819_79820_79821_79822_79823_79824_79825_79826_79827_79828_79829_79830_79831_79832_79833_79834_79835_79836_79837_79838_79839_79840_79841_79842_79843_79844_79845_79846_79847_79848_79849_79850_79851_79852_79853_79854_79855_79856_79857_79858_79859_79860_79861_79862_79863_79864_79865_79866_79867_79868_79869_79870_79871_79872_79873_79874_79875_79876_79877_79878_79879_79880_79881_79882_79883_79884_79885_79886_79887_79888_79889_79890_79891_79892_79893_79894_79895_79896_79897_79898_79899_79900_79901_79902_79903_79904_79905_79906_79907_79908_79909_79910_79911_79912_79913_79914_79915_79916_79917_79918_79919_79920_79921_79922_79923_79924_79925_79926_79927_79928_79929_79930_79931_79932_79933_79934_79935_79936_79937_79938_79939_79940_79941_79942_79943_79944_79945_79946_79947_79948_79949_79950_79951_79952_79953_79954_79955_79956_79957_79958_79959_79960_79961_79962_79963_79964_79965_79966_79967_79968_79969_79970_79971_79972_79973_79974_79975_79976_79977_79978_79979_79980_79981_79982_79983_79984_79985_79986_79987_79988_79989_79990_79991_79992_79993_79994_79995_79996_79997_79998_79999_80000_80001_80002_80003_80004_80005_80006_80007_80008_80009_80010_80011_80012_80013_80014_80015_80016_80017_80018_80019_80020_80021_80022_80023_80024_80025_80026_80027_80028_80029_80030_80031_80032_80033_80034_80035_80036_80037_80038_80039_80040_80041_80042_80043_80044_80045_80046_80047_80048_80049_80050_80051_80052_80053_80054_80055_80056_80057_80058_80059_80060_80061_80062_80063_80064_80065_80066_80067_80068_80069_80070_80071_80072_80073_80074_80075_80076_80077_80078_80079_80080_80081_80082_80083_80084_80085_80086_80087_80088_80089_80090_80091_80092_80093_80094_80095_80096_80097_80098_80099_80100_80101_80102_80103_80104_80105_80106_80107_80108_80109_80110_80111_80112_80113_80114_80115_80116_80117_80118_80119_80120_80121_80122_80123_80124_80125_80126_80127_80128_80129_80130_80131_80132_80133_80134_80135_80136_80137_80138_80139_80140_80141_80142_80143_80144_80145_80146_80147_80148_80149_80150_80151_80152_80153_80154_80155_80156_80157_80158_80159_80160_80161_80162_80163_80164_80165_80166_80167_80168_80169_80170_80171_80172_80173_80174_80175_80176_80177_80178_80179_80180_80181_80182_80183_80184_80185_80186_80187_80188_80189_80190_80191_80192_80193_80194_80195_80196_80197_80198_80199_80200_80201_80202_80203_80204_80205_80206_80207_80208_80209_80210_80211_80212_80213_80214_80215_80216_80217_80218_80219_80220_80221_80222_80223_80224_80225_80226_80227_80228_80229_80230_80231_80232_80233_80234_80235_80236_80237_80238_80239_80240_80241_80242_80243_80244_80245_80246_80247_80248_80249_80250_80251_80252_80253_80254_80255_80256_80257_80258_80259_80260_80261_80262_80263_80264_80265_80266_80267_80268_80269_80270_80271_80272_80273_80274_80275_80276_80277_80278_80279_80280_80281_80282_80283_80284_80285_80286_80287_80288_80289_80290_80291_80292_80293_80294_80295_80296_80297_80298_80299_80300_80301_80302_80303_80304_80305_80306_80307_80308_80309_80310_80311_80312_80313_80314_80315_80316_80317_80318_80319_80320_80321_80322_80323_80324_80325_80326_80327_80328_80329_80330_80331_80332_80333_80334_80335_80336_80337_80338_80339_80340_80341_80342_80343_80344_80345_80346_80347_80348_80349_80350_80351_80352_80353_80354_80355_80356_80357_80358_80359_80360_80361_80362_80363_80364_80365_80366_80367_80368_80369_80370_80371_80372_80373_80374_80375_80376_80377_80378_80379_80380_80381_80382_80383_80384_80385_80386_80387_80388_80389_80390_80391_80392_80393_80394_80395_80396_80397_80398_80399_80400_80401_80402_80403_80404_80405_80406_80407_80408_80409_80410_80411_80412_80413_80414_80415_80416_80417_80418_80419_80420_80421_80422_80423_80424_80425_80426_80427_80428_80429_80430_80431_80432_80433_80434_80435_80436_80437_80438_80439_80440_80441_80442_80443_80444_80445_80446_80447_80448_80449_80450_80451_80452_80453_80454_80455_80456_80457_80458_80459_80460_80461_80462_80463_80464_80465_80466_80467_80468_80469_80470_80471_80472_80473_80474_80475_80476_80477_80478_80479_80480_80481_80482_80483_80484_80485_80486_80487_80488_80489_80490_80491_80492_80493_80494_80495_80496_80497_80498_80499_80500_80501_80502_80503_80504_80505_80506_80507_80508_80509_80510_80511_80512_80513_80514_80515_80516_80517_80518_80519_80520_80521_80522_80523_80524_80525_80526_80527_80528_80529_80530_80531_80532_80533_80534_80535_80536_80537_80538_80539_80540_80541_80542_80543_80544_80545_80546_80547_80548_80549_80550_80551_80552_80553_80554_80555_80556_80557_80558_80559_80560_80561_80562_80563_80564_80565_80566_80567_80568_80569_80570_80571_80572_80573_80574_80575_80576_80577_80578_80579_80580_80581_80582_80583_80584_80585_80586_80587_80588_80589_80590_80591_80592_80593_80594_80595_80596_80597_80598_80599_80600_80601_80602_80603_80604_80605_80606_80607_80608_80609_80610_80611_80612_80613_80614_80615_80616_80617_80618_80619_80620_80621_80622_80623_80624_80625_80626_80627_80628_80629_80630_80631_80632_80633_80634_80635_80636_80637_80638_80639_80640_80641_80642_80643_80644_80645_80646_80647_80648_80649_80650_80651_80652_80653_80654_80655_80656_80657_80658_80659_80660_80661_80662_80663_80664_80665_80666_80667_80668_80669_80670_80671_80672_80673_80674_80675_80676_80677_80678_80679_80680_80681_80682_80683_80684_80685_80686_80687_80688_80689_80690_80691_80692_80693_80694_80695_80696_80697_80698_80699_80700_80701_80702_80703_80704_80705_80706_80707_80708_80709_80710_80711_80712_80713_80714_80715_80716_80717_80718_80719_80720_80721_80722_80723_80724_80725_80726_80727_80728_80729_80730_80731_80732_80733_80734_80735_80736_80737_80738_80739_80740_80741_80742_80743_80744_80745_80746_80747_80748_80749_80750_80751_80752_80753_80754_80755_80756_80757_80758_80759_80760_80761_80762_80763_80764_80765_80766_80767_80768_80769_80770_80771_80772_80773_80774_80775_80776_80777_80778_80779_80780_80781_80782_80783_80784_80785_80786_80787_80788_80789_80790_80791_80792_80793_80794_80795_80796_80797_80798_80799_80800_80801_80802_80803_80804_80805_80806_80807_80808_80809_80810_80811_80812_80813_80814_80815_80816_80817_80818_80819_80820_80821_80822_80823_80824_80825_80826_80827_80828_80829_80830_80831_80832_80833_80834_80835_80836_80837_80838_80839_80840_80841_80842_80843_80844_80845_80846_80847_80848_80849_80850_80851_80852_80853_80854_80855_80856_80857_80858_80859_80860_80861_80862_80863_80864_80865_80866_80867_80868_80869_80870_80871_80872_80873_80874_80875_80876_80877_80878_80879_80880_80881_80882_80883_80884_80885_80886_80887_80888_80889_80890_80891_80892_80893_80894_80895_80896_80897_80898_80899_80900_80901_80902_80903_80904_80905_80906_80907_80908_80909_80910_80911_80912_80913_80914_80915_80916_80917_80918_80919_80920_80921_80922_80923_80924_80925_80926_80927_80928_80929_80930_80931_80932_80933_80934_80935_80936_80937_80938_80939_80940_80941_80942_80943_80944_80945_80946_80947_80948_80949_80950_80951_80952_80953_80954_80955_80956_80957_80958_80959_80960_80961_80962_80963_80964_80965_80966_80967_80968_80969_80970_80971_80972_80973_80974_80975_80976_80977_80978_80979_80980_80981_80982_80983_80984_80985_80986_80987_80988_80989_80990_80991_80992_80993_80994_80995_80996_80997_80998_80999_81000_81001_81002_81003_81004_81005_81006_81007_81008_81009_81010_81011_81012_81013_81014_81015_81016_81017_81018_81019_81020_81021_81022_81023_81024_81025_81026_81027_81028_81029_81030_81031_81032_81033_81034_81035_81036_81037_81038_81039_81040_81041_81042_81043_81044_81045_81046_81047_81048_81049_81050_81051_81052_81053_81054_81055_81056_81057_81058_81059_81060_81061_81062_81063_81064_81065_81066_81067_81068_81069_81070_81071_81072_81073_81074_81075_81076_81077_81078_81079_81080_81081_81082_81083_81084_81085_81086_81087_81088_81089_81090_81091_81092_81093_81094_81095_81096_81097_81098_81099_81100_81101_81102_81103_81104_81105_81106_81107_81108_81109_81110_81111_81112_81113_81114_81115_81116_81117_81118_81119_81120_81121_81122_81123_81124_81125_81126_81127_81128_81129_81130_81131_81132_81133_81134_81135_81136_81137_81138_81139_81140_81141_81142_81143_81144_81145_81146_81147_81148_81149_81150_81151_81152_81153_81154_81155_81156_81157_81158_81159_81160_81161_81162_81163_81164_81165_81166_81167_81168_81169_81170_81171_81172_81173_81174_81175_81176_81177_81178_81179_81180_81181_81182_81183_81184_81185_81186_81187_81188_81189_81190_81191_81192_81193_81194_81195_81196_81197_81198_81199_81200_81201_81202_81203_81204_81205_81206_81207_81208_81209_81210_81211_81212_81213_81214_81215_81216_81217_81218_81219_81220_81221_81222_81223_81224_81225_81226_81227_81228_81229_81230_81231_81232_81233_81234_81235_81236_81237_81238_81239_81240_81241_81242_81243_81244_81245_81246_81247_81248_81249_81250_81251_81252_81253_81254_81255_81256_81257_81258_81259_81260_81261_81262_81263_81264_81265_81266_81267_81268_81269_81270_81271_81272_81273_81274_81275_81276_81277_81278_81279_81280_81281_81282_81283_81284_81285_81286_81287_81288_81289_81290_81291_81292_81293_81294_81295_81296_81297_81298_81299_81300_81301_81302_81303_81304_81305_81306_81307_81308_81309_81310_81311_81312_81313_81314_81315_81316_81317_81318_81319_81320_81321_81322_81323_81324_81325_81326_81327_81328_81329_81330_81331_81332_81333_81334_81335_81336_81337_81338_81339_81340_81341_81342_81343_81344_81345_81346_81347_81348_81349_81350_81351_81352_81353_81354_81355_81356_81357_81358_81359_81360_81361_81362_81363_81364_81365_81366_81367_81368_81369_81370_81371_81372_81373_81374_81375_81376_81377_81378_81379_81380_81381_81382_81383_81384_81385_81386_81387_81388_81389_81390_81391_81392_81393_81394_81395_81396_81397_81398_81399_81400_81401_81402_81403_81404_81405_81406_81407_81408_81409_81410_81411_81412_81413_81414_81415_81416_81417_81418_81419_81420_81421_81422_81423_81424_81425_81426_81427_81428_81429_81430_81431_81432_81433_81434_81435_81436_81437_81438_81439_81440_81441_81442_81443_81444_81445_81446_81447_81448_81449_81450_81451_81452_81453_81454_81455_81456_81457_81458_81459_81460_81461_81462_81463_81464_81465_81466_81467_81468_81469_81470_81471_81472_81473_81474_81475_81476_81477_81478_81479_81480_81481_81482_81483_81484_81485_81486_81487_81488_81489_81490_81491_81492_81493_81494_81495_81496_81497_81498_81499_81500_81501_81502_81503_81504_81505_81506_81507_81508_81509_81510_81511_81512_81513_81514_81515_81516_81517_81518_81519_81520_81521_81522_81523_81524_81525_81526_81527_81528_81529_81530_81531_81532_81533_81534_81535_81536_81537_81538_81539_81540_81541_81542_81543_81544_81545_81546_81547_81548_81549_81550_81551_81552_81553_81554_81555_81556_81557_81558_81559_81560_81561_81562_81563_81564_81565_81566_81567_81568_81569_81570_81571_81572_81573_81574_81575_81576_81577_81578_81579_81580_81581_81582_81583_81584_81585_81586_81587_81588_81589_81590_81591_81592_81593_81594_81595_81596_81597_81598_81599_81600_81601_81602_81603_81604_81605_81606_81607_81608_81609_81610_81611_81612_81613_81614_81615_81616_81617_81618_81619_81620_81621_81622_81623_81624_81625_81626_81627_81628_81629_81630_81631_81632_81633_81634_81635_81636_81637_81638_81639_81640_81641_81642_81643_81644_81645_81646_81647_81648_81649_81650_81651_81652_81653_81654_81655_81656_81657_81658_81659_81660_81661_81662_81663_81664_81665_81666_81667_81668_81669_81670_81671_81672_81673_81674_81675_81676_81677_81678_81679_81680_81681_81682_81683_81684_81685_81686_81687_81688_81689_81690_81691_81692_81693_81694_81695_81696_81697_81698_81699_81700_81701_81702_81703_81704_81705_81706_81707_81708_81709_81710_81711_81712_81713_81714_81715_81716_81717_81718_81719_81720_81721_81722_81723_81724_81725_81726_81727_81728_81729_81730_81731_81732_81733_81734_81735_81736_81737_81738_81739_81740_81741_81742_81743_81744_81745_81746_81747_81748_81749_81750_81751_81752_81753_81754_81755_81756_81757_81758_81759_81760_81761_81762_81763_81764_81765_81766_81767_81768_81769_81770_81771_81772_81773_81774_81775_81776_81777_81778_81779_81780_81781_81782_81783_81784_81785_81786_81787_81788_81789_81790_81791_81792_81793_81794_81795_81796_81797_81798_81799_81800_81801_81802_81803_81804_81805_81806_81807_81808_81809_81810_81811_81812_81813_81814_81815_81816_81817_81818_81819_81820_81821_81822_81823_81824_81825_81826_81827_81828_81829_81830_81831_81832_81833_81834_81835_81836_81837_81838_81839_81840_81841_81842_81843_81844_81845_81846_81847_81848_81849_81850_81851_81852_81853_81854_81855_81856_81857_81858_81859_81860_81861_81862_81863_81864_81865_81866_81867_81868_81869_81870_81871_81872_81873_81874_81875_81876_81877_81878_81879_81880_81881_81882_81883_81884_81885_81886_81887_81888_81889_81890_81891_81892_81893_81894_81895_81896_81897_81898_81899_81900_81901_81902_81903_81904_81905_81906_81907_81908_81909_81910_81911_81912_81913_81914_81915_81916_81917_81918_81919_81920_81921_81922_81923_81924_81925_81926_81927_81928_81929_81930_81931_81932_81933_81934_81935_81936_81937_81938_81939_81940_81941_81942_81943_81944_81945_81946_81947_81948_81949_81950_81951_81952_81953_81954_81955_81956_81957_81958_81959_81960_81961_81962_81963_81964_81965_81966_81967_81968_81969_81970_81971_81972_81973_81974_81975_81976_81977_81978_81979_81980_81981_81982_81983_81984_81985_81986_81987_81988_81989_81990_81991_81992_81993_81994_81995_81996_81997_81998_81999_82000_82001_82002_82003_82004_82005_82006_82007_82008_82009_82010_82011_82012_82013_82014_82015_82016_82017_82018_82019_82020_82021_82022_82023_82024_82025_82026_82027_82028_82029_82030_82031_82032_82033_82034_82035_82036_82037_82038_82039_82040_82041_82042_82043_82044_82045_82046_82047_82048_82049_82050_82051_82052_82053_82054_82055_82056_82057_82058_82059_82060_82061_82062_82063_82064_82065_82066_82067_82068_82069_82070_82071_82072_82073_82074_82075_82076_82077_82078_82079_82080_82081_82082_82083_82084_82085_82086_82087_82088_82089_82090_82091_82092_82093_82094_82095_82096_82097_82098_82099_82100_82101_82102_82103_82104_82105_82106_82107_82108_82109_82110_82111_82112_82113_82114_82115_82116_82117_82118_82119_82120_82121_82122_82123_82124_82125_82126_82127_82128_82129_82130_82131_82132_82133_82134_82135_82136_82137_82138_82139_82140_82141_82142_82143_82144_82145_82146_82147_82148_82149_82150_82151_82152_82153_82154_82155_82156_82157_82158_82159_82160_82161_82162_82163_82164_82165_82166_82167_82168_82169_82170_82171_82172_82173_82174_82175_82176_82177_82178_82179_82180_82181_82182_82183_82184_82185_82186_82187_82188_82189_82190_82191_82192_82193_82194_82195_82196_82197_82198_82199_82200_82201_82202_82203_82204_82205_82206_82207_82208_82209_82210_82211_82212_82213_82214_82215_82216_82217_82218_82219_82220_82221_82222_82223_82224_82225_82226_82227_82228_82229_82230_82231_82232_82233_82234_82235_82236_82237_82238_82239_82240_82241_82242_82243_82244_82245_82246_82247_82248_82249_82250_82251_82252_82253_82254_82255_82256_82257_82258_82259_82260_82261_82262_82263_82264_82265_82266_82267_82268_82269_82270_82271_82272_82273_82274_82275_82276_82277_82278_82279_82280_82281_82282_82283_82284_82285_82286_82287_82288_82289_82290_82291_82292_82293_82294_82295_82296_82297_82298_82299_82300_82301_82302_82303_82304_82305_82306_82307_82308_82309_82310_82311_82312_82313_82314_82315_82316_82317_82318_82319_82320_82321_82322_82323_82324_82325_82326_82327_82328_82329_82330_82331_82332_82333_82334_82335_82336_82337_82338_82339_82340_82341_82342_82343_82344_82345_82346_82347_82348_82349_82350_82351_82352_82353_82354_82355_82356_82357_82358_82359_82360_82361_82362_82363_82364_82365_82366_82367_82368_82369_82370_82371_82372_82373_82374_82375_82376_82377_82378_82379_82380_82381_82382_82383_82384_82385_82386_82387_82388_82389_82390_82391_82392_82393_82394_82395_82396_82397_82398_82399_82400_82401_82402_82403_82404_82405_82406_82407_82408_82409_82410_82411_82412_82413_82414_82415_82416_82417_82418_82419_82420_82421_82422_82423_82424_82425_82426_82427_82428_82429_82430_82431_82432_82433_82434_82435_82436_82437_82438_82439_82440_82441_82442_82443_82444_82445_82446_82447_82448_82449_82450_82451_82452_82453_82454_82455_82456_82457_82458_82459_82460_82461_82462_82463_82464_82465_82466_82467_82468_82469_82470_82471_82472_82473_82474_82475_82476_82477_82478_82479_82480_82481_82482_82483_82484_82485_82486_82487_82488_82489_82490_82491_82492_82493_82494_82495_82496_82497_82498_82499_82500_82501_82502_82503_82504_82505_82506_82507_82508_82509_82510_82511_82512_82513_82514_82515_82516_82517_82518_82519_82520_82521_82522_82523_82524_82525_82526_82527_82528_82529_82530_82531_82532_82533_82534_82535_82536_82537_82538_82539_82540_82541_82542_82543_82544_82545_82546_82547_82548_82549_82550_82551_82552_82553_82554_82555_82556_82557_82558_82559_82560_82561_82562_82563_82564_82565_82566_82567_82568_82569_82570_82571_82572_82573_82574_82575_82576_82577_82578_82579_82580_82581_82582_82583_82584_82585_82586_82587_82588_82589_82590_82591_82592_82593_82594_82595_82596_82597_82598_82599_82600_82601_82602_82603_82604_82605_82606_82607_82608_82609_82610_82611_82612_82613_82614_82615_82616_82617_82618_82619_82620_82621_82622_82623_82624_82625_82626_82627_82628_82629_82630_82631_82632_82633_82634_82635_82636_82637_82638_82639_82640_82641_82642_82643_82644_82645_82646_82647_82648_82649_82650_82651_82652_82653_82654_82655_82656_82657_82658_82659_82660_82661_82662_82663_82664_82665_82666_82667_82668_82669_82670_82671_82672_82673_82674_82675_82676_82677_82678_82679_82680_82681_82682_82683_82684_82685_82686_82687_82688_82689_82690_82691_82692_82693_82694_82695_82696_82697_82698_82699_82700_82701_82702_82703_82704_82705_82706_82707_82708_82709_82710_82711_82712_82713_82714_82715_82716_82717_82718_82719_82720_82721_82722_82723_82724_82725_82726_82727_82728_82729_82730_82731_82732_82733_82734_82735_82736_82737_82738_82739_82740_82741_82742_82743_82744_82745_82746_82747_82748_82749_82750_82751_82752_82753_82754_82755_82756_82757_82758_82759_82760_82761_82762_82763_82764_82765_82766_82767_82768_82769_82770_82771_82772_82773_82774_82775_82776_82777_82778_82779_82780_82781_82782_82783_82784_82785_82786_82787_82788_82789_82790_82791_82792_82793_82794_82795_82796_82797_82798_82799_82800_82801_82802_82803_82804_82805_82806_82807_82808_82809_82810_82811_82812_82813_82814_82815_82816_82817_82818_82819_82820_82821_82822_82823_82824_82825_82826_82827_82828_82829_82830_82831_82832_82833_82834_82835_82836_82837_82838_82839_82840_82841_82842_82843_82844_82845_82846_82847_82848_82849_82850_82851_82852_82853_82854_82855_82856_82857_82858_82859_82860_82861_82862_82863_82864_82865_82866_82867_82868_82869_82870_82871_82872_82873_82874_82875_82876_82877_82878_82879_82880_82881_82882_82883_82884_82885_82886_82887_82888_82889_82890_82891_82892_82893_82894_82895_82896_82897_82898_82899_82900_82901_82902_82903_82904_82905_82906_82907_82908_82909_82910_82911_82912_82913_82914_82915_82916_82917_82918_82919_82920_82921_82922_82923_82924_82925_82926_82927_82928_82929_82930_82931_82932_82933_82934_82935_82936_82937_82938_82939_82940_82941_82942_82943_82944_82945_82946_82947_82948_82949_82950_82951_82952_82953_82954_82955_82956_82957_82958_82959_82960_82961_82962_82963_82964_82965_82966_82967_82968_82969_82970_82971_82972_82973_82974_82975_82976_82977_82978_82979_82980_82981_82982_82983_82984_82985_82986_82987_82988_82989_82990_82991_82992_82993_82994_82995_82996_82997_82998_82999_83000_83001_83002_83003_83004_83005_83006_83007_83008_83009_83010_83011_83012_83013_83014_83015_83016_83017_83018_83019_83020_83021_83022_83023_83024_83025_83026_83027_83028_83029_83030_83031_83032_83033_83034_83035_83036_83037_83038_83039_83040_83041_83042_83043_83044_83045_83046_83047_83048_83049_83050_83051_83052_83053_83054_83055_83056_83057_83058_83059_83060_83061_83062_83063_83064_83065_83066_83067_83068_83069_83070_83071_83072_83073_83074_83075_83076_83077_83078_83079_83080_83081_83082_83083_83084_83085_83086_83087_83088_83089_83090_83091_83092_83093_83094_83095_83096_83097_83098_83099_83100_83101_83102_83103_83104_83105_83106_83107_83108_83109_83110_83111_83112_83113_83114_83115_83116_83117_83118_83119_83120_83121_83122_83123_83124_83125_83126_83127_83128_83129_83130_83131_83132_83133_83134_83135_83136_83137_83138_83139_83140_83141_83142_83143_83144_83145_83146_83147_83148_83149_83150_83151_83152_83153_83154_83155_83156_83157_83158_83159_83160_83161_83162_83163_83164_83165_83166_83167_83168_83169_83170_83171_83172_83173_83174_83175_83176_83177_83178_83179_83180_83181_83182_83183_83184_83185_83186_83187_83188_83189_83190_83191_83192_83193_83194_83195_83196_83197_83198_83199_83200_83201_83202_83203_83204_83205_83206_83207_83208_83209_83210_83211_83212_83213_83214_83215_83216_83217_83218_83219_83220_83221_83222_83223_83224_83225_83226_83227_83228_83229_83230_83231_83232_83233_83234_83235_83236_83237_83238_83239_83240_83241_83242_83243_83244_83245_83246_83247_83248_83249_83250_83251_83252_83253_83254_83255_83256_83257_83258_83259_83260_83261_83262_83263_83264_83265_83266_83267_83268_83269_83270_83271_83272_83273_83274_83275_83276_83277_83278_83279_83280_83281_83282_83283_83284_83285_83286_83287_83288_83289_83290_83291_83292_83293_83294_83295_83296_83297_83298_83299_83300_83301_83302_83303_83304_83305_83306_83307_83308_83309_83310_83311_83312_83313_83314_83315_83316_83317_83318_83319_83320_83321_83322_83323_83324_83325_83326_83327_83328_83329_83330_83331_83332_83333_83334_83335_83336_83337_83338_83339_83340_83341_83342_83343_83344_83345_83346_83347_83348_83349_83350_83351_83352_83353_83354_83355_83356_83357_83358_83359_83360_83361_83362_83363_83364_83365_83366_83367_83368_83369_83370_83371_83372_83373_83374_83375_83376_83377_83378_83379_83380_83381_83382_83383_83384_83385_83386_83387_83388_83389_83390_83391_83392_83393_83394_83395_83396_83397_83398_83399_83400_83401_83402_83403_83404_83405_83406_83407_83408_83409_83410_83411_83412_83413_83414_83415_83416_83417_83418_83419_83420_83421_83422_83423_83424_83425_83426_83427_83428_83429_83430_83431_83432_83433_83434_83435_83436_83437_83438_83439_83440_83441_83442_83443_83444_83445_83446_83447_83448_83449_83450_83451_83452_83453_83454_83455_83456_83457_83458_83459_83460_83461_83462_83463_83464_83465_83466_83467_83468_83469_83470_83471_83472_83473_83474_83475_83476_83477_83478_83479_83480_83481_83482_83483_83484_83485_83486_83487_83488_83489_83490_83491_83492_83493_83494_83495_83496_83497_83498_83499_83500_83501_83502_83503_83504_83505_83506_83507_83508_83509_83510_83511_83512_83513_83514_83515_83516_83517_83518_83519_83520_83521_83522_83523_83524_83525_83526_83527_83528_83529_83530_83531_83532_83533_83534_83535_83536_83537_83538_83539_83540_83541_83542_83543_83544_83545_83546_83547_83548_83549_83550_83551_83552_83553_83554_83555_83556_83557_83558_83559_83560_83561_83562_83563_83564_83565_83566_83567_83568_83569_83570_83571_83572_83573_83574_83575_83576_83577_83578_83579_83580_83581_83582_83583_83584_83585_83586_83587_83588_83589_83590_83591_83592_83593_83594_83595_83596_83597_83598_83599_83600_83601_83602_83603_83604_83605_83606_83607_83608_83609_83610_83611_83612_83613_83614_83615_83616_83617_83618_83619_83620_83621_83622_83623_83624_83625_83626_83627_83628_83629_83630_83631_83632_83633_83634_83635_83636_83637_83638_83639_83640_83641_83642_83643_83644_83645_83646_83647_83648_83649_83650_83651_83652_83653_83654_83655_83656_83657_83658_83659_83660_83661_83662_83663_83664_83665_83666_83667_83668_83669_83670_83671_83672_83673_83674_83675_83676_83677_83678_83679_83680_83681_83682_83683_83684_83685_83686_83687_83688_83689_83690_83691_83692_83693_83694_83695_83696_83697_83698_83699_83700_83701_83702_83703_83704_83705_83706_83707_83708_83709_83710_83711_83712_83713_83714_83715_83716_83717_83718_83719_83720_83721_83722_83723_83724_83725_83726_83727_83728_83729_83730_83731_83732_83733_83734_83735_83736_83737_83738_83739_83740_83741_83742_83743_83744_83745_83746_83747_83748_83749_83750_83751_83752_83753_83754_83755_83756_83757_83758_83759_83760_83761_83762_83763_83764_83765_83766_83767_83768_83769_83770_83771_83772_83773_83774_83775_83776_83777_83778_83779_83780_83781_83782_83783_83784_83785_83786_83787_83788_83789_83790_83791_83792_83793_83794_83795_83796_83797_83798_83799_83800_83801_83802_83803_83804_83805_83806_83807_83808_83809_83810_83811_83812_83813_83814_83815_83816_83817_83818_83819_83820_83821_83822_83823_83824_83825_83826_83827_83828_83829_83830_83831_83832_83833_83834_83835_83836_83837_83838_83839_83840_83841_83842_83843_83844_83845_83846_83847_83848_83849_83850_83851_83852_83853_83854_83855_83856_83857_83858_83859_83860_83861_83862_83863_83864_83865_83866_83867_83868_83869_83870_83871_83872_83873_83874_83875_83876_83877_83878_83879_83880_83881_83882_83883_83884_83885_83886_83887_83888_83889_83890_83891_83892_83893_83894_83895_83896_83897_83898_83899_83900_83901_83902_83903_83904_83905_83906_83907_83908_83909_83910_83911_83912_83913_83914_83915_83916_83917_83918_83919_83920_83921_83922_83923_83924_83925_83926_83927_83928_83929_83930_83931_83932_83933_83934_83935_83936_83937_83938_83939_83940_83941_83942_83943_83944_83945_83946_83947_83948_83949_83950_83951_83952_83953_83954_83955_83956_83957_83958_83959_83960_83961_83962_83963_83964_83965_83966_83967_83968_83969_83970_83971_83972_83973_83974_83975_83976_83977_83978_83979_83980_83981_83982_83983_83984_83985_83986_83987_83988_83989_83990_83991_83992_83993_83994_83995_83996_83997_83998_83999_84000_84001_84002_84003_84004_84005_84006_84007_84008_84009_84010_84011_84012_84013_84014_84015_84016_84017_84018_84019_84020_84021_84022_84023_84024_84025_84026_84027_84028_84029_84030_84031_84032_84033_84034_84035_84036_84037_84038_84039_84040_84041_84042_84043_84044_84045_84046_84047_84048_84049_84050_84051_84052_84053_84054_84055_84056_84057_84058_84059_84060_84061_84062_84063_84064_84065_84066_84067_84068_84069_84070_84071_84072_84073_84074_84075_84076_84077_84078_84079_84080_84081_84082_84083_84084_84085_84086_84087_84088_84089_84090_84091_84092_84093_84094_84095_84096_84097_84098_84099_84100_84101_84102_84103_84104_84105_84106_84107_84108_84109_84110_84111_84112_84113_84114_84115_84116_84117_84118_84119_84120_84121_84122_84123_84124_84125_84126_84127_84128_84129_84130_84131_84132_84133_84134_84135_84136_84137_84138_84139_84140_84141_84142_84143_84144_84145_84146_84147_84148_84149_84150_84151_84152_84153_84154_84155_84156_84157_84158_84159_84160_84161_84162_84163_84164_84165_84166_84167_84168_84169_84170_84171_84172_84173_84174_84175_84176_84177_84178_84179_84180_84181_84182_84183_84184_84185_84186_84187_84188_84189_84190_84191_84192_84193_84194_84195_84196_84197_84198_84199_84200_84201_84202_84203_84204_84205_84206_84207_84208_84209_84210_84211_84212_84213_84214_84215_84216_84217_84218_84219_84220_84221_84222_84223_84224_84225_84226_84227_84228_84229_84230_84231_84232_84233_84234_84235_84236_84237_84238_84239_84240_84241_84242_84243_84244_84245_84246_84247_84248_84249_84250_84251_84252_84253_84254_84255_84256_84257_84258_84259_84260_84261_84262_84263_84264_84265_84266_84267_84268_84269_84270_84271_84272_84273_84274_84275_84276_84277_84278_84279_84280_84281_84282_84283_84284_84285_84286_84287_84288_84289_84290_84291_84292_84293_84294_84295_84296_84297_84298_84299_84300_84301_84302_84303_84304_84305_84306_84307_84308_84309_84310_84311_84312_84313_84314_84315_84316_84317_84318_84319_84320_84321_84322_84323_84324_84325_84326_84327_84328_84329_84330_84331_84332_84333_84334_84335_84336_84337_84338_84339_84340_84341_84342_84343_84344_84345_84346_84347_84348_84349_84350_84351_84352_84353_84354_84355_84356_84357_84358_84359_84360_84361_84362_84363_84364_84365_84366_84367_84368_84369_84370_84371_84372_84373_84374_84375_84376_84377_84378_84379_84380_84381_84382_84383_84384_84385_84386_84387_84388_84389_84390_84391_84392_84393_84394_84395_84396_84397_84398_84399_84400_84401_84402_84403_84404_84405_84406_84407_84408_84409_84410_84411_84412_84413_84414_84415_84416_84417_84418_84419_84420_84421_84422_84423_84424_84425_84426_84427_84428_84429_84430_84431_84432_84433_84434_84435_84436_84437_84438_84439_84440_84441_84442_84443_84444_84445_84446_84447_84448_84449_84450_84451_84452_84453_84454_84455_84456_84457_84458_84459_84460_84461_84462_84463_84464_84465_84466_84467_84468_84469_84470_84471_84472_84473_84474_84475_84476_84477_84478_84479_84480_84481_84482_84483_84484_84485_84486_84487_84488_84489_84490_84491_84492_84493_84494_84495_84496_84497_84498_84499_84500_84501_84502_84503_84504_84505_84506_84507_84508_84509_84510_84511_84512_84513_84514_84515_84516_84517_84518_84519_84520_84521_84522_84523_84524_84525_84526_84527_84528_84529_84530_84531_84532_84533_84534_84535_84536_84537_84538_84539_84540_84541_84542_84543_84544_84545_84546_84547_84548_84549_84550_84551_84552_84553_84554_84555_84556_84557_84558_84559_84560_84561_84562_84563_84564_84565_84566_84567_84568_84569_84570_84571_84572_84573_84574_84575_84576_84577_84578_84579_84580_84581_84582_84583_84584_84585_84586_84587_84588_84589_84590_84591_84592_84593_84594_84595_84596_84597_84598_84599_84600_84601_84602_84603_84604_84605_84606_84607_84608_84609_84610_84611_84612_84613_84614_84615_84616_84617_84618_84619_84620_84621_84622_84623_84624_84625_84626_84627_84628_84629_84630_84631_84632_84633_84634_84635_84636_84637_84638_84639_84640_84641_84642_84643_84644_84645_84646_84647_84648_84649_84650_84651_84652_84653_84654_84655_84656_84657_84658_84659_84660_84661_84662_84663_84664_84665_84666_84667_84668_84669_84670_84671_84672_84673_84674_84675_84676_84677_84678_84679_84680_84681_84682_84683_84684_84685_84686_84687_84688_84689_84690_84691_84692_84693_84694_84695_84696_84697_84698_84699_84700_84701_84702_84703_84704_84705_84706_84707_84708_84709_84710_84711_84712_84713_84714_84715_84716_84717_84718_84719_84720_84721_84722_84723_84724_84725_84726_84727_84728_84729_84730_84731_84732_84733_84734_84735_84736_84737_84738_84739_84740_84741_84742_84743_84744_84745_84746_84747_84748_84749_84750_84751_84752_84753_84754_84755_84756_84757_84758_84759_84760_84761_84762_84763_84764_84765_84766_84767_84768_84769_84770_84771_84772_84773_84774_84775_84776_84777_84778_84779_84780_84781_84782_84783_84784_84785_84786_84787_84788_84789_84790_84791_84792_84793_84794_84795_84796_84797_84798_84799_84800_84801_84802_84803_84804_84805_84806_84807_84808_84809_84810_84811_84812_84813_84814_84815_84816_84817_84818_84819_84820_84821_84822_84823_84824_84825_84826_84827_84828_84829_84830_84831_84832_84833_84834_84835_84836_84837_84838_84839_84840_84841_84842_84843_84844_84845_84846_84847_84848_84849_84850_84851_84852_84853_84854_84855_84856_84857_84858_84859_84860_84861_84862_84863_84864_84865_84866_84867_84868_84869_84870_84871_84872_84873_84874_84875_84876_84877_84878_84879_84880_84881_84882_84883_84884_84885_84886_84887_84888_84889_84890_84891_84892_84893_84894_84895_84896_84897_84898_84899_84900_84901_84902_84903_84904_84905_84906_84907_84908_84909_84910_84911_84912_84913_84914_84915_84916_84917_84918_84919_84920_84921_84922_84923_84924_84925_84926_84927_84928_84929_84930_84931_84932_84933_84934_84935_84936_84937_84938_84939_84940_84941_84942_84943_84944_84945_84946_84947_84948_84949_84950_84951_84952_84953_84954_84955_84956_84957_84958_84959_84960_84961_84962_84963_84964_84965_84966_84967_84968_84969_84970_84971_84972_84973_84974_84975_84976_84977_84978_84979_84980_84981_84982_84983_84984_84985_84986_84987_84988_84989_84990_84991_84992_84993_84994_84995_84996_84997_84998_84999_85000_85001_85002_85003_85004_85005_85006_85007_85008_85009_85010_85011_85012_85013_85014_85015_85016_85017_85018_85019_85020_85021_85022_85023_85024_85025_85026_85027_85028_85029_85030_85031_85032_85033_85034_85035_85036_85037_85038_85039_85040_85041_85042_85043_85044_85045_85046_85047_85048_85049_85050_85051_85052_85053_85054_85055_85056_85057_85058_85059_85060_85061_85062_85063_85064_85065_85066_85067_85068_85069_85070_85071_85072_85073_85074_85075_85076_85077_85078_85079_85080_85081_85082_85083_85084_85085_85086_85087_85088_85089_85090_85091_85092_85093_85094_85095_85096_85097_85098_85099_85100_85101_85102_85103_85104_85105_85106_85107_85108_85109_85110_85111_85112_85113_85114_85115_85116_85117_85118_85119_85120_85121_85122_85123_85124_85125_85126_85127_85128_85129_85130_85131_85132_85133_85134_85135_85136_85137_85138_85139_85140_85141_85142_85143_85144_85145_85146_85147_85148_85149_85150_85151_85152_85153_85154_85155_85156_85157_85158_85159_85160_85161_85162_85163_85164_85165_85166_85167_85168_85169_85170_85171_85172_85173_85174_85175_85176_85177_85178_85179_85180_85181_85182_85183_85184_85185_85186_85187_85188_85189_85190_85191_85192_85193_85194_85195_85196_85197_85198_85199_85200_85201_85202_85203_85204_85205_85206_85207_85208_85209_85210_85211_85212_85213_85214_85215_85216_85217_85218_85219_85220_85221_85222_85223_85224_85225_85226_85227_85228_85229_85230_85231_85232_85233_85234_85235_85236_85237_85238_85239_85240_85241_85242_85243_85244_85245_85246_85247_85248_85249_85250_85251_85252_85253_85254_85255_85256_85257_85258_85259_85260_85261_85262_85263_85264_85265_85266_85267_85268_85269_85270_85271_85272_85273_85274_85275_85276_85277_85278_85279_85280_85281_85282_85283_85284_85285_85286_85287_85288_85289_85290_85291_85292_85293_85294_85295_85296_85297_85298_85299_85300_85301_85302_85303_85304_85305_85306_85307_85308_85309_85310_85311_85312_85313_85314_85315_85316_85317_85318_85319_85320_85321_85322_85323_85324_85325_85326_85327_85328_85329_85330_85331_85332_85333_85334_85335_85336_85337_85338_85339_85340_85341_85342_85343_85344_85345_85346_85347_85348_85349_85350_85351_85352_85353_85354_85355_85356_85357_85358_85359_85360_85361_85362_85363_85364_85365_85366_85367_85368_85369_85370_85371_85372_85373_85374_85375_85376_85377_85378_85379_85380_85381_85382_85383_85384_85385_85386_85387_85388_85389_85390_85391_85392_85393_85394_85395_85396_85397_85398_85399_85400_85401_85402_85403_85404_85405_85406_85407_85408_85409_85410_85411_85412_85413_85414_85415_85416_85417_85418_85419_85420_85421_85422_85423_85424_85425_85426_85427_85428_85429_85430_85431_85432_85433_85434_85435_85436_85437_85438_85439_85440_85441_85442_85443_85444_85445_85446_85447_85448_85449_85450_85451_85452_85453_85454_85455_85456_85457_85458_85459_85460_85461_85462_85463_85464_85465_85466_85467_85468_85469_85470_85471_85472_85473_85474_85475_85476_85477_85478_85479_85480_85481_85482_85483_85484_85485_85486_85487_85488_85489_85490_85491_85492_85493_85494_85495_85496_85497_85498_85499_85500_85501_85502_85503_85504_85505_85506_85507_85508_85509_85510_85511_85512_85513_85514_85515_85516_85517_85518_85519_85520_85521_85522_85523_85524_85525_85526_85527_85528_85529_85530_85531_85532_85533_85534_85535_85536_85537_85538_85539_85540_85541_85542_85543_85544_85545_85546_85547_85548_85549_85550_85551_85552_85553_85554_85555_85556_85557_85558_85559_85560_85561_85562_85563_85564_85565_85566_85567_85568_85569_85570_85571_85572_85573_85574_85575_85576_85577_85578_85579_85580_85581_85582_85583_85584_85585_85586_85587_85588_85589_85590_85591_85592_85593_85594_85595_85596_85597_85598_85599_85600_85601_85602_85603_85604_85605_85606_85607_85608_85609_85610_85611_85612_85613_85614_85615_85616_85617_85618_85619_85620_85621_85622_85623_85624_85625_85626_85627_85628_85629_85630_85631_85632_85633_85634_85635_85636_85637_85638_85639_85640_85641_85642_85643_85644_85645_85646_85647_85648_85649_85650_85651_85652_85653_85654_85655_85656_85657_85658_85659_85660_85661_85662_85663_85664_85665_85666_85667_85668_85669_85670_85671_85672_85673_85674_85675_85676_85677_85678_85679_85680_85681_85682_85683_85684_85685_85686_85687_85688_85689_85690_85691_85692_85693_85694_85695_85696_85697_85698_85699_85700_85701_85702_85703_85704_85705_85706_85707_85708_85709_85710_85711_85712_85713_85714_85715_85716_85717_85718_85719_85720_85721_85722_85723_85724_85725_85726_85727_85728_85729_85730_85731_85732_85733_85734_85735_85736_85737_85738_85739_85740_85741_85742_85743_85744_85745_85746_85747_85748_85749_85750_85751_85752_85753_85754_85755_85756_85757_85758_85759_85760_85761_85762_85763_85764_85765_85766_85767_85768_85769_85770_85771_85772_85773_85774_85775_85776_85777_85778_85779_85780_85781_85782_85783_85784_85785_85786_85787_85788_85789_85790_85791_85792_85793_85794_85795_85796_85797_85798_85799_85800_85801_85802_85803_85804_85805_85806_85807_85808_85809_85810_85811_85812_85813_85814_85815_85816_85817_85818_85819_85820_85821_85822_85823_85824_85825_85826_85827_85828_85829_85830_85831_85832_85833_85834_85835_85836_85837_85838_85839_85840_85841_85842_85843_85844_85845_85846_85847_85848_85849_85850_85851_85852_85853_85854_85855_85856_85857_85858_85859_85860_85861_85862_85863_85864_85865_85866_85867_85868_85869_85870_85871_85872_85873_85874_85875_85876_85877_85878_85879_85880_85881_85882_85883_85884_85885_85886_85887_85888_85889_85890_85891_85892_85893_85894_85895_85896_85897_85898_85899_85900_85901_85902_85903_85904_85905_85906_85907_85908_85909_85910_85911_85912_85913_85914_85915_85916_85917_85918_85919_85920_85921_85922_85923_85924_85925_85926_85927_85928_85929_85930_85931_85932_85933_85934_85935_85936_85937_85938_85939_85940_85941_85942_85943_85944_85945_85946_85947_85948_85949_85950_85951_85952_85953_85954_85955_85956_85957_85958_85959_85960_85961_85962_85963_85964_85965_85966_85967_85968_85969_85970_85971_85972_85973_85974_85975_85976_85977_85978_85979_85980_85981_85982_85983_85984_85985_85986_85987_85988_85989_85990_85991_85992_85993_85994_85995_85996_85997_85998_85999_86000_86001_86002_86003_86004_86005_86006_86007_86008_86009_86010_86011_86012_86013_86014_86015_86016_86017_86018_86019_86020_86021_86022_86023_86024_86025_86026_86027_86028_86029_86030_86031_86032_86033_86034_86035_86036_86037_86038_86039_86040_86041_86042_86043_86044_86045_86046_86047_86048_86049_86050_86051_86052_86053_86054_86055_86056_86057_86058_86059_86060_86061_86062_86063_86064_86065_86066_86067_86068_86069_86070_86071_86072_86073_86074_86075_86076_86077_86078_86079_86080_86081_86082_86083_86084_86085_86086_86087_86088_86089_86090_86091_86092_86093_86094_86095_86096_86097_86098_86099_86100_86101_86102_86103_86104_86105_86106_86107_86108_86109_86110_86111_86112_86113_86114_86115_86116_86117_86118_86119_86120_86121_86122_86123_86124_86125_86126_86127_86128_86129_86130_86131_86132_86133_86134_86135_86136_86137_86138_86139_86140_86141_86142_86143_86144_86145_86146_86147_86148_86149_86150_86151_86152_86153_86154_86155_86156_86157_86158_86159_86160_86161_86162_86163_86164_86165_86166_86167_86168_86169_86170_86171_86172_86173_86174_86175_86176_86177_86178_86179_86180_86181_86182_86183_86184_86185_86186_86187_86188_86189_86190_86191_86192_86193_86194_86195_86196_86197_86198_86199_86200_86201_86202_86203_86204_86205_86206_86207_86208_86209_86210_86211_86212_86213_86214_86215_86216_86217_86218_86219_86220_86221_86222_86223_86224_86225_86226_86227_86228_86229_86230_86231_86232_86233_86234_86235_86236_86237_86238_86239_86240_86241_86242_86243_86244_86245_86246_86247_86248_86249_86250_86251_86252_86253_86254_86255_86256_86257_86258_86259_86260_86261_86262_86263_86264_86265_86266_86267_86268_86269_86270_86271_86272_86273_86274_86275_86276_86277_86278_86279_86280_86281_86282_86283_86284_86285_86286_86287_86288_86289_86290_86291_86292_86293_86294_86295_86296_86297_86298_86299_86300_86301_86302_86303_86304_86305_86306_86307_86308_86309_86310_86311_86312_86313_86314_86315_86316_86317_86318_86319_86320_86321_86322_86323_86324_86325_86326_86327_86328_86329_86330_86331_86332_86333_86334_86335_86336_86337_86338_86339_86340_86341_86342_86343_86344_86345_86346_86347_86348_86349_86350_86351_86352_86353_86354_86355_86356_86357_86358_86359_86360_86361_86362_86363_86364_86365_86366_86367_86368_86369_86370_86371_86372_86373_86374_86375_86376_86377_86378_86379_86380_86381_86382_86383_86384_86385_86386_86387_86388_86389_86390_86391_86392_86393_86394_86395_86396_86397_86398_86399_86400_86401_86402_86403_86404_86405_86406_86407_86408_86409_86410_86411_86412_86413_86414_86415_86416_86417_86418_86419_86420_86421_86422_86423_86424_86425_86426_86427_86428_86429_86430_86431_86432_86433_86434_86435_86436_86437_86438_86439_86440_86441_86442_86443_86444_86445_86446_86447_86448_86449_86450_86451_86452_86453_86454_86455_86456_86457_86458_86459_86460_86461_86462_86463_86464_86465_86466_86467_86468_86469_86470_86471_86472_86473_86474_86475_86476_86477_86478_86479_86480_86481_86482_86483_86484_86485_86486_86487_86488_86489_86490_86491_86492_86493_86494_86495_86496_86497_86498_86499_86500_86501_86502_86503_86504_86505_86506_86507_86508_86509_86510_86511_86512_86513_86514_86515_86516_86517_86518_86519_86520_86521_86522_86523_86524_86525_86526_86527_86528_86529_86530_86531_86532_86533_86534_86535_86536_86537_86538_86539_86540_86541_86542_86543_86544_86545_86546_86547_86548_86549_86550_86551_86552_86553_86554_86555_86556_86557_86558_86559_86560_86561_86562_86563_86564_86565_86566_86567_86568_86569_86570_86571_86572_86573_86574_86575_86576_86577_86578_86579_86580_86581_86582_86583_86584_86585_86586_86587_86588_86589_86590_86591_86592_86593_86594_86595_86596_86597_86598_86599_86600_86601_86602_86603_86604_86605_86606_86607_86608_86609_86610_86611_86612_86613_86614_86615_86616_86617_86618_86619_86620_86621_86622_86623_86624_86625_86626_86627_86628_86629_86630_86631_86632_86633_86634_86635_86636_86637_86638_86639_86640_86641_86642_86643_86644_86645_86646_86647_86648_86649_86650_86651_86652_86653_86654_86655_86656_86657_86658_86659_86660_86661_86662_86663_86664_86665_86666_86667_86668_86669_86670_86671_86672_86673_86674_86675_86676_86677_86678_86679_86680_86681_86682_86683_86684_86685_86686_86687_86688_86689_86690_86691_86692_86693_86694_86695_86696_86697_86698_86699_86700_86701_86702_86703_86704_86705_86706_86707_86708_86709_86710_86711_86712_86713_86714_86715_86716_86717_86718_86719_86720_86721_86722_86723_86724_86725_86726_86727_86728_86729_86730_86731_86732_86733_86734_86735_86736_86737_86738_86739_86740_86741_86742_86743_86744_86745_86746_86747_86748_86749_86750_86751_86752_86753_86754_86755_86756_86757_86758_86759_86760_86761_86762_86763_86764_86765_86766_86767_86768_86769_86770_86771_86772_86773_86774_86775_86776_86777_86778_86779_86780_86781_86782_86783_86784_86785_86786_86787_86788_86789_86790_86791_86792_86793_86794_86795_86796_86797_86798_86799_86800_86801_86802_86803_86804_86805_86806_86807_86808_86809_86810_86811_86812_86813_86814_86815_86816_86817_86818_86819_86820_86821_86822_86823_86824_86825_86826_86827_86828_86829_86830_86831_86832_86833_86834_86835_86836_86837_86838_86839_86840_86841_86842_86843_86844_86845_86846_86847_86848_86849_86850_86851_86852_86853_86854_86855_86856_86857_86858_86859_86860_86861_86862_86863_86864_86865_86866_86867_86868_86869_86870_86871_86872_86873_86874_86875_86876_86877_86878_86879_86880_86881_86882_86883_86884_86885_86886_86887_86888_86889_86890_86891_86892_86893_86894_86895_86896_86897_86898_86899_86900_86901_86902_86903_86904_86905_86906_86907_86908_86909_86910_86911_86912_86913_86914_86915_86916_86917_86918_86919_86920_86921_86922_86923_86924_86925_86926_86927_86928_86929_86930_86931_86932_86933_86934_86935_86936_86937_86938_86939_86940_86941_86942_86943_86944_86945_86946_86947_86948_86949_86950_86951_86952_86953_86954_86955_86956_86957_86958_86959_86960_86961_86962_86963_86964_86965_86966_86967_86968_86969_86970_86971_86972_86973_86974_86975_86976_86977_86978_86979_86980_86981_86982_86983_86984_86985_86986_86987_86988_86989_86990_86991_86992_86993_86994_86995_86996_86997_86998_86999_87000_87001_87002_87003_87004_87005_87006_87007_87008_87009_87010_87011_87012_87013_87014_87015_87016_87017_87018_87019_87020_87021_87022_87023_87024_87025_87026_87027_87028_87029_87030_87031_87032_87033_87034_87035_87036_87037_87038_87039_87040_87041_87042_87043_87044_87045_87046_87047_87048_87049_87050_87051_87052_87053_87054_87055_87056_87057_87058_87059_87060_87061_87062_87063_87064_87065_87066_87067_87068_87069_87070_87071_87072_87073_87074_87075_87076_87077_87078_87079_87080_87081_87082_87083_87084_87085_87086_87087_87088_87089_87090_87091_87092_87093_87094_87095_87096_87097_87098_87099_87100_87101_87102_87103_87104_87105_87106_87107_87108_87109_87110_87111_87112_87113_87114_87115_87116_87117_87118_87119_87120_87121_87122_87123_87124_87125_87126_87127_87128_87129_87130_87131_87132_87133_87134_87135_87136_87137_87138_87139_87140_87141_87142_87143_87144_87145_87146_87147_87148_87149_87150_87151_87152_87153_87154_87155_87156_87157_87158_87159_87160_87161_87162_87163_87164_87165_87166_87167_87168_87169_87170_87171_87172_87173_87174_87175_87176_87177_87178_87179_87180_87181_87182_87183_87184_87185_87186_87187_87188_87189_87190_87191_87192_87193_87194_87195_87196_87197_87198_87199_87200_87201_87202_87203_87204_87205_87206_87207_87208_87209_87210_87211_87212_87213_87214_87215_87216_87217_87218_87219_87220_87221_87222_87223_87224_87225_87226_87227_87228_87229_87230_87231_87232_87233_87234_87235_87236_87237_87238_87239_87240_87241_87242_87243_87244_87245_87246_87247_87248_87249_87250_87251_87252_87253_87254_87255_87256_87257_87258_87259_87260_87261_87262_87263_87264_87265_87266_87267_87268_87269_87270_87271_87272_87273_87274_87275_87276_87277_87278_87279_87280_87281_87282_87283_87284_87285_87286_87287_87288_87289_87290_87291_87292_87293_87294_87295_87296_87297_87298_87299_87300_87301_87302_87303_87304_87305_87306_87307_87308_87309_87310_87311_87312_87313_87314_87315_87316_87317_87318_87319_87320_87321_87322_87323_87324_87325_87326_87327_87328_87329_87330_87331_87332_87333_87334_87335_87336_87337_87338_87339_87340_87341_87342_87343_87344_87345_87346_87347_87348_87349_87350_87351_87352_87353_87354_87355_87356_87357_87358_87359_87360_87361_87362_87363_87364_87365_87366_87367_87368_87369_87370_87371_87372_87373_87374_87375_87376_87377_87378_87379_87380_87381_87382_87383_87384_87385_87386_87387_87388_87389_87390_87391_87392_87393_87394_87395_87396_87397_87398_87399_87400_87401_87402_87403_87404_87405_87406_87407_87408_87409_87410_87411_87412_87413_87414_87415_87416_87417_87418_87419_87420_87421_87422_87423_87424_87425_87426_87427_87428_87429_87430_87431_87432_87433_87434_87435_87436_87437_87438_87439_87440_87441_87442_87443_87444_87445_87446_87447_87448_87449_87450_87451_87452_87453_87454_87455_87456_87457_87458_87459_87460_87461_87462_87463_87464_87465_87466_87467_87468_87469_87470_87471_87472_87473_87474_87475_87476_87477_87478_87479_87480_87481_87482_87483_87484_87485_87486_87487_87488_87489_87490_87491_87492_87493_87494_87495_87496_87497_87498_87499_87500_87501_87502_87503_87504_87505_87506_87507_87508_87509_87510_87511_87512_87513_87514_87515_87516_87517_87518_87519_87520_87521_87522_87523_87524_87525_87526_87527_87528_87529_87530_87531_87532_87533_87534_87535_87536_87537_87538_87539_87540_87541_87542_87543_87544_87545_87546_87547_87548_87549_87550_87551_87552_87553_87554_87555_87556_87557_87558_87559_87560_87561_87562_87563_87564_87565_87566_87567_87568_87569_87570_87571_87572_87573_87574_87575_87576_87577_87578_87579_87580_87581_87582_87583_87584_87585_87586_87587_87588_87589_87590_87591_87592_87593_87594_87595_87596_87597_87598_87599_87600_87601_87602_87603_87604_87605_87606_87607_87608_87609_87610_87611_87612_87613_87614_87615_87616_87617_87618_87619_87620_87621_87622_87623_87624_87625_87626_87627_87628_87629_87630_87631_87632_87633_87634_87635_87636_87637_87638_87639_87640_87641_87642_87643_87644_87645_87646_87647_87648_87649_87650_87651_87652_87653_87654_87655_87656_87657_87658_87659_87660_87661_87662_87663_87664_87665_87666_87667_87668_87669_87670_87671_87672_87673_87674_87675_87676_87677_87678_87679_87680_87681_87682_87683_87684_87685_87686_87687_87688_87689_87690_87691_87692_87693_87694_87695_87696_87697_87698_87699_87700_87701_87702_87703_87704_87705_87706_87707_87708_87709_87710_87711_87712_87713_87714_87715_87716_87717_87718_87719_87720_87721_87722_87723_87724_87725_87726_87727_87728_87729_87730_87731_87732_87733_87734_87735_87736_87737_87738_87739_87740_87741_87742_87743_87744_87745_87746_87747_87748_87749_87750_87751_87752_87753_87754_87755_87756_87757_87758_87759_87760_87761_87762_87763_87764_87765_87766_87767_87768_87769_87770_87771_87772_87773_87774_87775_87776_87777_87778_87779_87780_87781_87782_87783_87784_87785_87786_87787_87788_87789_87790_87791_87792_87793_87794_87795_87796_87797_87798_87799_87800_87801_87802_87803_87804_87805_87806_87807_87808_87809_87810_87811_87812_87813_87814_87815_87816_87817_87818_87819_87820_87821_87822_87823_87824_87825_87826_87827_87828_87829_87830_87831_87832_87833_87834_87835_87836_87837_87838_87839_87840_87841_87842_87843_87844_87845_87846_87847_87848_87849_87850_87851_87852_87853_87854_87855_87856_87857_87858_87859_87860_87861_87862_87863_87864_87865_87866_87867_87868_87869_87870_87871_87872_87873_87874_87875_87876_87877_87878_87879_87880_87881_87882_87883_87884_87885_87886_87887_87888_87889_87890_87891_87892_87893_87894_87895_87896_87897_87898_87899_87900_87901_87902_87903_87904_87905_87906_87907_87908_87909_87910_87911_87912_87913_87914_87915_87916_87917_87918_87919_87920_87921_87922_87923_87924_87925_87926_87927_87928_87929_87930_87931_87932_87933_87934_87935_87936_87937_87938_87939_87940_87941_87942_87943_87944_87945_87946_87947_87948_87949_87950_87951_87952_87953_87954_87955_87956_87957_87958_87959_87960_87961_87962_87963_87964_87965_87966_87967_87968_87969_87970_87971_87972_87973_87974_87975_87976_87977_87978_87979_87980_87981_87982_87983_87984_87985_87986_87987_87988_87989_87990_87991_87992_87993_87994_87995_87996_87997_87998_87999_88000_88001_88002_88003_88004_88005_88006_88007_88008_88009_88010_88011_88012_88013_88014_88015_88016_88017_88018_88019_88020_88021_88022_88023_88024_88025_88026_88027_88028_88029_88030_88031_88032_88033_88034_88035_88036_88037_88038_88039_88040_88041_88042_88043_88044_88045_88046_88047_88048_88049_88050_88051_88052_88053_88054_88055_88056_88057_88058_88059_88060_88061_88062_88063_88064_88065_88066_88067_88068_88069_88070_88071_88072_88073_88074_88075_88076_88077_88078_88079_88080_88081_88082_88083_88084_88085_88086_88087_88088_88089_88090_88091_88092_88093_88094_88095_88096_88097_88098_88099_88100_88101_88102_88103_88104_88105_88106_88107_88108_88109_88110_88111_88112_88113_88114_88115_88116_88117_88118_88119_88120_88121_88122_88123_88124_88125_88126_88127_88128_88129_88130_88131_88132_88133_88134_88135_88136_88137_88138_88139_88140_88141_88142_88143_88144_88145_88146_88147_88148_88149_88150_88151_88152_88153_88154_88155_88156_88157_88158_88159_88160_88161_88162_88163_88164_88165_88166_88167_88168_88169_88170_88171_88172_88173_88174_88175_88176_88177_88178_88179_88180_88181_88182_88183_88184' + } + + postContractCall(_: PostContractCallInput): void { + } + + preTxExecute(_: PreTxExecuteInput): void { + } + + postTxExecute(_: PostTxExecuteInput): void { + } +} + +// 2.register aspect Instance +const aspect = new LargeSizeAspect1M(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/abnormal-large-size-aspect-300k.ts b/packages/testcases/aspect/abnormal-large-size-aspect-300k.ts new file mode 100644 index 0000000..3947f74 --- /dev/null +++ b/packages/testcases/aspect/abnormal-large-size-aspect-300k.ts @@ -0,0 +1,59 @@ +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + + +class LargeSizeAspect300K implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void { } + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + operation(input: OperationInput): Uint8Array { + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + const str = '1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25_26_27_28_29_30_31_32_33_34_35_36_37_38_39_40_41_42_43_44_45_46_47_48_49_50_51_52_53_54_55_56_57_58_59_60_61_62_63_64_65_66_67_68_69_70_71_72_73_74_75_76_77_78_79_80_81_82_83_84_85_86_87_88_89_90_91_92_93_94_95_96_97_98_99_100_101_102_103_104_105_106_107_108_109_110_111_112_113_114_115_116_117_118_119_120_121_122_123_124_125_126_127_128_129_130_131_132_133_134_135_136_137_138_139_140_141_142_143_144_145_146_147_148_149_150_151_152_153_154_155_156_157_158_159_160_161_162_163_164_165_166_167_168_169_170_171_172_173_174_175_176_177_178_179_180_181_182_183_184_185_186_187_188_189_190_191_192_193_194_195_196_197_198_199_200_201_202_203_204_205_206_207_208_209_210_211_212_213_214_215_216_217_218_219_220_221_222_223_224_225_226_227_228_229_230_231_232_233_234_235_236_237_238_239_240_241_242_243_244_245_246_247_248_249_250_251_252_253_254_255_256_257_258_259_260_261_262_263_264_265_266_267_268_269_270_271_272_273_274_275_276_277_278_279_280_281_282_283_284_285_286_287_288_289_290_291_292_293_294_295_296_297_298_299_300_301_302_303_304_305_306_307_308_309_310_311_312_313_314_315_316_317_318_319_320_321_322_323_324_325_326_327_328_329_330_331_332_333_334_335_336_337_338_339_340_341_342_343_344_345_346_347_348_349_350_351_352_353_354_355_356_357_358_359_360_361_362_363_364_365_366_367_368_369_370_371_372_373_374_375_376_377_378_379_380_381_382_383_384_385_386_387_388_389_390_391_392_393_394_395_396_397_398_399_400_401_402_403_404_405_406_407_408_409_410_411_412_413_414_415_416_417_418_419_420_421_422_423_424_425_426_427_428_429_430_431_432_433_434_435_436_437_438_439_440_441_442_443_444_445_446_447_448_449_450_451_452_453_454_455_456_457_458_459_460_461_462_463_464_465_466_467_468_469_470_471_472_473_474_475_476_477_478_479_480_481_482_483_484_485_486_487_488_489_490_491_492_493_494_495_496_497_498_499_500_501_502_503_504_505_506_507_508_509_510_511_512_513_514_515_516_517_518_519_520_521_522_523_524_525_526_527_528_529_530_531_532_533_534_535_536_537_538_539_540_541_542_543_544_545_546_547_548_549_550_551_552_553_554_555_556_557_558_559_560_561_562_563_564_565_566_567_568_569_570_571_572_573_574_575_576_577_578_579_580_581_582_583_584_585_586_587_588_589_590_591_592_593_594_595_596_597_598_599_600_601_602_603_604_605_606_607_608_609_610_611_612_613_614_615_616_617_618_619_620_621_622_623_624_625_626_627_628_629_630_631_632_633_634_635_636_637_638_639_640_641_642_643_644_645_646_647_648_649_650_651_652_653_654_655_656_657_658_659_660_661_662_663_664_665_666_667_668_669_670_671_672_673_674_675_676_677_678_679_680_681_682_683_684_685_686_687_688_689_690_691_692_693_694_695_696_697_698_699_700_701_702_703_704_705_706_707_708_709_710_711_712_713_714_715_716_717_718_719_720_721_722_723_724_725_726_727_728_729_730_731_732_733_734_735_736_737_738_739_740_741_742_743_744_745_746_747_748_749_750_751_752_753_754_755_756_757_758_759_760_761_762_763_764_765_766_767_768_769_770_771_772_773_774_775_776_777_778_779_780_781_782_783_784_785_786_787_788_789_790_791_792_793_794_795_796_797_798_799_800_801_802_803_804_805_806_807_808_809_810_811_812_813_814_815_816_817_818_819_820_821_822_823_824_825_826_827_828_829_830_831_832_833_834_835_836_837_838_839_840_841_842_843_844_845_846_847_848_849_850_851_852_853_854_855_856_857_858_859_860_861_862_863_864_865_866_867_868_869_870_871_872_873_874_875_876_877_878_879_880_881_882_883_884_885_886_887_888_889_890_891_892_893_894_895_896_897_898_899_900_901_902_903_904_905_906_907_908_909_910_911_912_913_914_915_916_917_918_919_920_921_922_923_924_925_926_927_928_929_930_931_932_933_934_935_936_937_938_939_940_941_942_943_944_945_946_947_948_949_950_951_952_953_954_955_956_957_958_959_960_961_962_963_964_965_966_967_968_969_970_971_972_973_974_975_976_977_978_979_980_981_982_983_984_985_986_987_988_989_990_991_992_993_994_995_996_997_998_999_1000_1001_1002_1003_1004_1005_1006_1007_1008_1009_1010_1011_1012_1013_1014_1015_1016_1017_1018_1019_1020_1021_1022_1023_1024_1025_1026_1027_1028_1029_1030_1031_1032_1033_1034_1035_1036_1037_1038_1039_1040_1041_1042_1043_1044_1045_1046_1047_1048_1049_1050_1051_1052_1053_1054_1055_1056_1057_1058_1059_1060_1061_1062_1063_1064_1065_1066_1067_1068_1069_1070_1071_1072_1073_1074_1075_1076_1077_1078_1079_1080_1081_1082_1083_1084_1085_1086_1087_1088_1089_1090_1091_1092_1093_1094_1095_1096_1097_1098_1099_1100_1101_1102_1103_1104_1105_1106_1107_1108_1109_1110_1111_1112_1113_1114_1115_1116_1117_1118_1119_1120_1121_1122_1123_1124_1125_1126_1127_1128_1129_1130_1131_1132_1133_1134_1135_1136_1137_1138_1139_1140_1141_1142_1143_1144_1145_1146_1147_1148_1149_1150_1151_1152_1153_1154_1155_1156_1157_1158_1159_1160_1161_1162_1163_1164_1165_1166_1167_1168_1169_1170_1171_1172_1173_1174_1175_1176_1177_1178_1179_1180_1181_1182_1183_1184_1185_1186_1187_1188_1189_1190_1191_1192_1193_1194_1195_1196_1197_1198_1199_1200_1201_1202_1203_1204_1205_1206_1207_1208_1209_1210_1211_1212_1213_1214_1215_1216_1217_1218_1219_1220_1221_1222_1223_1224_1225_1226_1227_1228_1229_1230_1231_1232_1233_1234_1235_1236_1237_1238_1239_1240_1241_1242_1243_1244_1245_1246_1247_1248_1249_1250_1251_1252_1253_1254_1255_1256_1257_1258_1259_1260_1261_1262_1263_1264_1265_1266_1267_1268_1269_1270_1271_1272_1273_1274_1275_1276_1277_1278_1279_1280_1281_1282_1283_1284_1285_1286_1287_1288_1289_1290_1291_1292_1293_1294_1295_1296_1297_1298_1299_1300_1301_1302_1303_1304_1305_1306_1307_1308_1309_1310_1311_1312_1313_1314_1315_1316_1317_1318_1319_1320_1321_1322_1323_1324_1325_1326_1327_1328_1329_1330_1331_1332_1333_1334_1335_1336_1337_1338_1339_1340_1341_1342_1343_1344_1345_1346_1347_1348_1349_1350_1351_1352_1353_1354_1355_1356_1357_1358_1359_1360_1361_1362_1363_1364_1365_1366_1367_1368_1369_1370_1371_1372_1373_1374_1375_1376_1377_1378_1379_1380_1381_1382_1383_1384_1385_1386_1387_1388_1389_1390_1391_1392_1393_1394_1395_1396_1397_1398_1399_1400_1401_1402_1403_1404_1405_1406_1407_1408_1409_1410_1411_1412_1413_1414_1415_1416_1417_1418_1419_1420_1421_1422_1423_1424_1425_1426_1427_1428_1429_1430_1431_1432_1433_1434_1435_1436_1437_1438_1439_1440_1441_1442_1443_1444_1445_1446_1447_1448_1449_1450_1451_1452_1453_1454_1455_1456_1457_1458_1459_1460_1461_1462_1463_1464_1465_1466_1467_1468_1469_1470_1471_1472_1473_1474_1475_1476_1477_1478_1479_1480_1481_1482_1483_1484_1485_1486_1487_1488_1489_1490_1491_1492_1493_1494_1495_1496_1497_1498_1499_1500_1501_1502_1503_1504_1505_1506_1507_1508_1509_1510_1511_1512_1513_1514_1515_1516_1517_1518_1519_1520_1521_1522_1523_1524_1525_1526_1527_1528_1529_1530_1531_1532_1533_1534_1535_1536_1537_1538_1539_1540_1541_1542_1543_1544_1545_1546_1547_1548_1549_1550_1551_1552_1553_1554_1555_1556_1557_1558_1559_1560_1561_1562_1563_1564_1565_1566_1567_1568_1569_1570_1571_1572_1573_1574_1575_1576_1577_1578_1579_1580_1581_1582_1583_1584_1585_1586_1587_1588_1589_1590_1591_1592_1593_1594_1595_1596_1597_1598_1599_1600_1601_1602_1603_1604_1605_1606_1607_1608_1609_1610_1611_1612_1613_1614_1615_1616_1617_1618_1619_1620_1621_1622_1623_1624_1625_1626_1627_1628_1629_1630_1631_1632_1633_1634_1635_1636_1637_1638_1639_1640_1641_1642_1643_1644_1645_1646_1647_1648_1649_1650_1651_1652_1653_1654_1655_1656_1657_1658_1659_1660_1661_1662_1663_1664_1665_1666_1667_1668_1669_1670_1671_1672_1673_1674_1675_1676_1677_1678_1679_1680_1681_1682_1683_1684_1685_1686_1687_1688_1689_1690_1691_1692_1693_1694_1695_1696_1697_1698_1699_1700_1701_1702_1703_1704_1705_1706_1707_1708_1709_1710_1711_1712_1713_1714_1715_1716_1717_1718_1719_1720_1721_1722_1723_1724_1725_1726_1727_1728_1729_1730_1731_1732_1733_1734_1735_1736_1737_1738_1739_1740_1741_1742_1743_1744_1745_1746_1747_1748_1749_1750_1751_1752_1753_1754_1755_1756_1757_1758_1759_1760_1761_1762_1763_1764_1765_1766_1767_1768_1769_1770_1771_1772_1773_1774_1775_1776_1777_1778_1779_1780_1781_1782_1783_1784_1785_1786_1787_1788_1789_1790_1791_1792_1793_1794_1795_1796_1797_1798_1799_1800_1801_1802_1803_1804_1805_1806_1807_1808_1809_1810_1811_1812_1813_1814_1815_1816_1817_1818_1819_1820_1821_1822_1823_1824_1825_1826_1827_1828_1829_1830_1831_1832_1833_1834_1835_1836_1837_1838_1839_1840_1841_1842_1843_1844_1845_1846_1847_1848_1849_1850_1851_1852_1853_1854_1855_1856_1857_1858_1859_1860_1861_1862_1863_1864_1865_1866_1867_1868_1869_1870_1871_1872_1873_1874_1875_1876_1877_1878_1879_1880_1881_1882_1883_1884_1885_1886_1887_1888_1889_1890_1891_1892_1893_1894_1895_1896_1897_1898_1899_1900_1901_1902_1903_1904_1905_1906_1907_1908_1909_1910_1911_1912_1913_1914_1915_1916_1917_1918_1919_1920_1921_1922_1923_1924_1925_1926_1927_1928_1929_1930_1931_1932_1933_1934_1935_1936_1937_1938_1939_1940_1941_1942_1943_1944_1945_1946_1947_1948_1949_1950_1951_1952_1953_1954_1955_1956_1957_1958_1959_1960_1961_1962_1963_1964_1965_1966_1967_1968_1969_1970_1971_1972_1973_1974_1975_1976_1977_1978_1979_1980_1981_1982_1983_1984_1985_1986_1987_1988_1989_1990_1991_1992_1993_1994_1995_1996_1997_1998_1999_2000_2001_2002_2003_2004_2005_2006_2007_2008_2009_2010_2011_2012_2013_2014_2015_2016_2017_2018_2019_2020_2021_2022_2023_2024_2025_2026_2027_2028_2029_2030_2031_2032_2033_2034_2035_2036_2037_2038_2039_2040_2041_2042_2043_2044_2045_2046_2047_2048_2049_2050_2051_2052_2053_2054_2055_2056_2057_2058_2059_2060_2061_2062_2063_2064_2065_2066_2067_2068_2069_2070_2071_2072_2073_2074_2075_2076_2077_2078_2079_2080_2081_2082_2083_2084_2085_2086_2087_2088_2089_2090_2091_2092_2093_2094_2095_2096_2097_2098_2099_2100_2101_2102_2103_2104_2105_2106_2107_2108_2109_2110_2111_2112_2113_2114_2115_2116_2117_2118_2119_2120_2121_2122_2123_2124_2125_2126_2127_2128_2129_2130_2131_2132_2133_2134_2135_2136_2137_2138_2139_2140_2141_2142_2143_2144_2145_2146_2147_2148_2149_2150_2151_2152_2153_2154_2155_2156_2157_2158_2159_2160_2161_2162_2163_2164_2165_2166_2167_2168_2169_2170_2171_2172_2173_2174_2175_2176_2177_2178_2179_2180_2181_2182_2183_2184_2185_2186_2187_2188_2189_2190_2191_2192_2193_2194_2195_2196_2197_2198_2199_2200_2201_2202_2203_2204_2205_2206_2207_2208_2209_2210_2211_2212_2213_2214_2215_2216_2217_2218_2219_2220_2221_2222_2223_2224_2225_2226_2227_2228_2229_2230_2231_2232_2233_2234_2235_2236_2237_2238_2239_2240_2241_2242_2243_2244_2245_2246_2247_2248_2249_2250_2251_2252_2253_2254_2255_2256_2257_2258_2259_2260_2261_2262_2263_2264_2265_2266_2267_2268_2269_2270_2271_2272_2273_2274_2275_2276_2277_2278_2279_2280_2281_2282_2283_2284_2285_2286_2287_2288_2289_2290_2291_2292_2293_2294_2295_2296_2297_2298_2299_2300_2301_2302_2303_2304_2305_2306_2307_2308_2309_2310_2311_2312_2313_2314_2315_2316_2317_2318_2319_2320_2321_2322_2323_2324_2325_2326_2327_2328_2329_2330_2331_2332_2333_2334_2335_2336_2337_2338_2339_2340_2341_2342_2343_2344_2345_2346_2347_2348_2349_2350_2351_2352_2353_2354_2355_2356_2357_2358_2359_2360_2361_2362_2363_2364_2365_2366_2367_2368_2369_2370_2371_2372_2373_2374_2375_2376_2377_2378_2379_2380_2381_2382_2383_2384_2385_2386_2387_2388_2389_2390_2391_2392_2393_2394_2395_2396_2397_2398_2399_2400_2401_2402_2403_2404_2405_2406_2407_2408_2409_2410_2411_2412_2413_2414_2415_2416_2417_2418_2419_2420_2421_2422_2423_2424_2425_2426_2427_2428_2429_2430_2431_2432_2433_2434_2435_2436_2437_2438_2439_2440_2441_2442_2443_2444_2445_2446_2447_2448_2449_2450_2451_2452_2453_2454_2455_2456_2457_2458_2459_2460_2461_2462_2463_2464_2465_2466_2467_2468_2469_2470_2471_2472_2473_2474_2475_2476_2477_2478_2479_2480_2481_2482_2483_2484_2485_2486_2487_2488_2489_2490_2491_2492_2493_2494_2495_2496_2497_2498_2499_2500_2501_2502_2503_2504_2505_2506_2507_2508_2509_2510_2511_2512_2513_2514_2515_2516_2517_2518_2519_2520_2521_2522_2523_2524_2525_2526_2527_2528_2529_2530_2531_2532_2533_2534_2535_2536_2537_2538_2539_2540_2541_2542_2543_2544_2545_2546_2547_2548_2549_2550_2551_2552_2553_2554_2555_2556_2557_2558_2559_2560_2561_2562_2563_2564_2565_2566_2567_2568_2569_2570_2571_2572_2573_2574_2575_2576_2577_2578_2579_2580_2581_2582_2583_2584_2585_2586_2587_2588_2589_2590_2591_2592_2593_2594_2595_2596_2597_2598_2599_2600_2601_2602_2603_2604_2605_2606_2607_2608_2609_2610_2611_2612_2613_2614_2615_2616_2617_2618_2619_2620_2621_2622_2623_2624_2625_2626_2627_2628_2629_2630_2631_2632_2633_2634_2635_2636_2637_2638_2639_2640_2641_2642_2643_2644_2645_2646_2647_2648_2649_2650_2651_2652_2653_2654_2655_2656_2657_2658_2659_2660_2661_2662_2663_2664_2665_2666_2667_2668_2669_2670_2671_2672_2673_2674_2675_2676_2677_2678_2679_2680_2681_2682_2683_2684_2685_2686_2687_2688_2689_2690_2691_2692_2693_2694_2695_2696_2697_2698_2699_2700_2701_2702_2703_2704_2705_2706_2707_2708_2709_2710_2711_2712_2713_2714_2715_2716_2717_2718_2719_2720_2721_2722_2723_2724_2725_2726_2727_2728_2729_2730_2731_2732_2733_2734_2735_2736_2737_2738_2739_2740_2741_2742_2743_2744_2745_2746_2747_2748_2749_2750_2751_2752_2753_2754_2755_2756_2757_2758_2759_2760_2761_2762_2763_2764_2765_2766_2767_2768_2769_2770_2771_2772_2773_2774_2775_2776_2777_2778_2779_2780_2781_2782_2783_2784_2785_2786_2787_2788_2789_2790_2791_2792_2793_2794_2795_2796_2797_2798_2799_2800_2801_2802_2803_2804_2805_2806_2807_2808_2809_2810_2811_2812_2813_2814_2815_2816_2817_2818_2819_2820_2821_2822_2823_2824_2825_2826_2827_2828_2829_2830_2831_2832_2833_2834_2835_2836_2837_2838_2839_2840_2841_2842_2843_2844_2845_2846_2847_2848_2849_2850_2851_2852_2853_2854_2855_2856_2857_2858_2859_2860_2861_2862_2863_2864_2865_2866_2867_2868_2869_2870_2871_2872_2873_2874_2875_2876_2877_2878_2879_2880_2881_2882_2883_2884_2885_2886_2887_2888_2889_2890_2891_2892_2893_2894_2895_2896_2897_2898_2899_2900_2901_2902_2903_2904_2905_2906_2907_2908_2909_2910_2911_2912_2913_2914_2915_2916_2917_2918_2919_2920_2921_2922_2923_2924_2925_2926_2927_2928_2929_2930_2931_2932_2933_2934_2935_2936_2937_2938_2939_2940_2941_2942_2943_2944_2945_2946_2947_2948_2949_2950_2951_2952_2953_2954_2955_2956_2957_2958_2959_2960_2961_2962_2963_2964_2965_2966_2967_2968_2969_2970_2971_2972_2973_2974_2975_2976_2977_2978_2979_2980_2981_2982_2983_2984_2985_2986_2987_2988_2989_2990_2991_2992_2993_2994_2995_2996_2997_2998_2999_3000_3001_3002_3003_3004_3005_3006_3007_3008_3009_3010_3011_3012_3013_3014_3015_3016_3017_3018_3019_3020_3021_3022_3023_3024_3025_3026_3027_3028_3029_3030_3031_3032_3033_3034_3035_3036_3037_3038_3039_3040_3041_3042_3043_3044_3045_3046_3047_3048_3049_3050_3051_3052_3053_3054_3055_3056_3057_3058_3059_3060_3061_3062_3063_3064_3065_3066_3067_3068_3069_3070_3071_3072_3073_3074_3075_3076_3077_3078_3079_3080_3081_3082_3083_3084_3085_3086_3087_3088_3089_3090_3091_3092_3093_3094_3095_3096_3097_3098_3099_3100_3101_3102_3103_3104_3105_3106_3107_3108_3109_3110_3111_3112_3113_3114_3115_3116_3117_3118_3119_3120_3121_3122_3123_3124_3125_3126_3127_3128_3129_3130_3131_3132_3133_3134_3135_3136_3137_3138_3139_3140_3141_3142_3143_3144_3145_3146_3147_3148_3149_3150_3151_3152_3153_3154_3155_3156_3157_3158_3159_3160_3161_3162_3163_3164_3165_3166_3167_3168_3169_3170_3171_3172_3173_3174_3175_3176_3177_3178_3179_3180_3181_3182_3183_3184_3185_3186_3187_3188_3189_3190_3191_3192_3193_3194_3195_3196_3197_3198_3199_3200_3201_3202_3203_3204_3205_3206_3207_3208_3209_3210_3211_3212_3213_3214_3215_3216_3217_3218_3219_3220_3221_3222_3223_3224_3225_3226_3227_3228_3229_3230_3231_3232_3233_3234_3235_3236_3237_3238_3239_3240_3241_3242_3243_3244_3245_3246_3247_3248_3249_3250_3251_3252_3253_3254_3255_3256_3257_3258_3259_3260_3261_3262_3263_3264_3265_3266_3267_3268_3269_3270_3271_3272_3273_3274_3275_3276_3277_3278_3279_3280_3281_3282_3283_3284_3285_3286_3287_3288_3289_3290_3291_3292_3293_3294_3295_3296_3297_3298_3299_3300_3301_3302_3303_3304_3305_3306_3307_3308_3309_3310_3311_3312_3313_3314_3315_3316_3317_3318_3319_3320_3321_3322_3323_3324_3325_3326_3327_3328_3329_3330_3331_3332_3333_3334_3335_3336_3337_3338_3339_3340_3341_3342_3343_3344_3345_3346_3347_3348_3349_3350_3351_3352_3353_3354_3355_3356_3357_3358_3359_3360_3361_3362_3363_3364_3365_3366_3367_3368_3369_3370_3371_3372_3373_3374_3375_3376_3377_3378_3379_3380_3381_3382_3383_3384_3385_3386_3387_3388_3389_3390_3391_3392_3393_3394_3395_3396_3397_3398_3399_3400_3401_3402_3403_3404_3405_3406_3407_3408_3409_3410_3411_3412_3413_3414_3415_3416_3417_3418_3419_3420_3421_3422_3423_3424_3425_3426_3427_3428_3429_3430_3431_3432_3433_3434_3435_3436_3437_3438_3439_3440_3441_3442_3443_3444_3445_3446_3447_3448_3449_3450_3451_3452_3453_3454_3455_3456_3457_3458_3459_3460_3461_3462_3463_3464_3465_3466_3467_3468_3469_3470_3471_3472_3473_3474_3475_3476_3477_3478_3479_3480_3481_3482_3483_3484_3485_3486_3487_3488_3489_3490_3491_3492_3493_3494_3495_3496_3497_3498_3499_3500_3501_3502_3503_3504_3505_3506_3507_3508_3509_3510_3511_3512_3513_3514_3515_3516_3517_3518_3519_3520_3521_3522_3523_3524_3525_3526_3527_3528_3529_3530_3531_3532_3533_3534_3535_3536_3537_3538_3539_3540_3541_3542_3543_3544_3545_3546_3547_3548_3549_3550_3551_3552_3553_3554_3555_3556_3557_3558_3559_3560_3561_3562_3563_3564_3565_3566_3567_3568_3569_3570_3571_3572_3573_3574_3575_3576_3577_3578_3579_3580_3581_3582_3583_3584_3585_3586_3587_3588_3589_3590_3591_3592_3593_3594_3595_3596_3597_3598_3599_3600_3601_3602_3603_3604_3605_3606_3607_3608_3609_3610_3611_3612_3613_3614_3615_3616_3617_3618_3619_3620_3621_3622_3623_3624_3625_3626_3627_3628_3629_3630_3631_3632_3633_3634_3635_3636_3637_3638_3639_3640_3641_3642_3643_3644_3645_3646_3647_3648_3649_3650_3651_3652_3653_3654_3655_3656_3657_3658_3659_3660_3661_3662_3663_3664_3665_3666_3667_3668_3669_3670_3671_3672_3673_3674_3675_3676_3677_3678_3679_3680_3681_3682_3683_3684_3685_3686_3687_3688_3689_3690_3691_3692_3693_3694_3695_3696_3697_3698_3699_3700_3701_3702_3703_3704_3705_3706_3707_3708_3709_3710_3711_3712_3713_3714_3715_3716_3717_3718_3719_3720_3721_3722_3723_3724_3725_3726_3727_3728_3729_3730_3731_3732_3733_3734_3735_3736_3737_3738_3739_3740_3741_3742_3743_3744_3745_3746_3747_3748_3749_3750_3751_3752_3753_3754_3755_3756_3757_3758_3759_3760_3761_3762_3763_3764_3765_3766_3767_3768_3769_3770_3771_3772_3773_3774_3775_3776_3777_3778_3779_3780_3781_3782_3783_3784_3785_3786_3787_3788_3789_3790_3791_3792_3793_3794_3795_3796_3797_3798_3799_3800_3801_3802_3803_3804_3805_3806_3807_3808_3809_3810_3811_3812_3813_3814_3815_3816_3817_3818_3819_3820_3821_3822_3823_3824_3825_3826_3827_3828_3829_3830_3831_3832_3833_3834_3835_3836_3837_3838_3839_3840_3841_3842_3843_3844_3845_3846_3847_3848_3849_3850_3851_3852_3853_3854_3855_3856_3857_3858_3859_3860_3861_3862_3863_3864_3865_3866_3867_3868_3869_3870_3871_3872_3873_3874_3875_3876_3877_3878_3879_3880_3881_3882_3883_3884_3885_3886_3887_3888_3889_3890_3891_3892_3893_3894_3895_3896_3897_3898_3899_3900_3901_3902_3903_3904_3905_3906_3907_3908_3909_3910_3911_3912_3913_3914_3915_3916_3917_3918_3919_3920_3921_3922_3923_3924_3925_3926_3927_3928_3929_3930_3931_3932_3933_3934_3935_3936_3937_3938_3939_3940_3941_3942_3943_3944_3945_3946_3947_3948_3949_3950_3951_3952_3953_3954_3955_3956_3957_3958_3959_3960_3961_3962_3963_3964_3965_3966_3967_3968_3969_3970_3971_3972_3973_3974_3975_3976_3977_3978_3979_3980_3981_3982_3983_3984_3985_3986_3987_3988_3989_3990_3991_3992_3993_3994_3995_3996_3997_3998_3999_4000_4001_4002_4003_4004_4005_4006_4007_4008_4009_4010_4011_4012_4013_4014_4015_4016_4017_4018_4019_4020_4021_4022_4023_4024_4025_4026_4027_4028_4029_4030_4031_4032_4033_4034_4035_4036_4037_4038_4039_4040_4041_4042_4043_4044_4045_4046_4047_4048_4049_4050_4051_4052_4053_4054_4055_4056_4057_4058_4059_4060_4061_4062_4063_4064_4065_4066_4067_4068_4069_4070_4071_4072_4073_4074_4075_4076_4077_4078_4079_4080_4081_4082_4083_4084_4085_4086_4087_4088_4089_4090_4091_4092_4093_4094_4095_4096_4097_4098_4099_4100_4101_4102_4103_4104_4105_4106_4107_4108_4109_4110_4111_4112_4113_4114_4115_4116_4117_4118_4119_4120_4121_4122_4123_4124_4125_4126_4127_4128_4129_4130_4131_4132_4133_4134_4135_4136_4137_4138_4139_4140_4141_4142_4143_4144_4145_4146_4147_4148_4149_4150_4151_4152_4153_4154_4155_4156_4157_4158_4159_4160_4161_4162_4163_4164_4165_4166_4167_4168_4169_4170_4171_4172_4173_4174_4175_4176_4177_4178_4179_4180_4181_4182_4183_4184_4185_4186_4187_4188_4189_4190_4191_4192_4193_4194_4195_4196_4197_4198_4199_4200_4201_4202_4203_4204_4205_4206_4207_4208_4209_4210_4211_4212_4213_4214_4215_4216_4217_4218_4219_4220_4221_4222_4223_4224_4225_4226_4227_4228_4229_4230_4231_4232_4233_4234_4235_4236_4237_4238_4239_4240_4241_4242_4243_4244_4245_4246_4247_4248_4249_4250_4251_4252_4253_4254_4255_4256_4257_4258_4259_4260_4261_4262_4263_4264_4265_4266_4267_4268_4269_4270_4271_4272_4273_4274_4275_4276_4277_4278_4279_4280_4281_4282_4283_4284_4285_4286_4287_4288_4289_4290_4291_4292_4293_4294_4295_4296_4297_4298_4299_4300_4301_4302_4303_4304_4305_4306_4307_4308_4309_4310_4311_4312_4313_4314_4315_4316_4317_4318_4319_4320_4321_4322_4323_4324_4325_4326_4327_4328_4329_4330_4331_4332_4333_4334_4335_4336_4337_4338_4339_4340_4341_4342_4343_4344_4345_4346_4347_4348_4349_4350_4351_4352_4353_4354_4355_4356_4357_4358_4359_4360_4361_4362_4363_4364_4365_4366_4367_4368_4369_4370_4371_4372_4373_4374_4375_4376_4377_4378_4379_4380_4381_4382_4383_4384_4385_4386_4387_4388_4389_4390_4391_4392_4393_4394_4395_4396_4397_4398_4399_4400_4401_4402_4403_4404_4405_4406_4407_4408_4409_4410_4411_4412_4413_4414_4415_4416_4417_4418_4419_4420_4421_4422_4423_4424_4425_4426_4427_4428_4429_4430_4431_4432_4433_4434_4435_4436_4437_4438_4439_4440_4441_4442_4443_4444_4445_4446_4447_4448_4449_4450_4451_4452_4453_4454_4455_4456_4457_4458_4459_4460_4461_4462_4463_4464_4465_4466_4467_4468_4469_4470_4471_4472_4473_4474_4475_4476_4477_4478_4479_4480_4481_4482_4483_4484_4485_4486_4487_4488_4489_4490_4491_4492_4493_4494_4495_4496_4497_4498_4499_4500_4501_4502_4503_4504_4505_4506_4507_4508_4509_4510_4511_4512_4513_4514_4515_4516_4517_4518_4519_4520_4521_4522_4523_4524_4525_4526_4527_4528_4529_4530_4531_4532_4533_4534_4535_4536_4537_4538_4539_4540_4541_4542_4543_4544_4545_4546_4547_4548_4549_4550_4551_4552_4553_4554_4555_4556_4557_4558_4559_4560_4561_4562_4563_4564_4565_4566_4567_4568_4569_4570_4571_4572_4573_4574_4575_4576_4577_4578_4579_4580_4581_4582_4583_4584_4585_4586_4587_4588_4589_4590_4591_4592_4593_4594_4595_4596_4597_4598_4599_4600_4601_4602_4603_4604_4605_4606_4607_4608_4609_4610_4611_4612_4613_4614_4615_4616_4617_4618_4619_4620_4621_4622_4623_4624_4625_4626_4627_4628_4629_4630_4631_4632_4633_4634_4635_4636_4637_4638_4639_4640_4641_4642_4643_4644_4645_4646_4647_4648_4649_4650_4651_4652_4653_4654_4655_4656_4657_4658_4659_4660_4661_4662_4663_4664_4665_4666_4667_4668_4669_4670_4671_4672_4673_4674_4675_4676_4677_4678_4679_4680_4681_4682_4683_4684_4685_4686_4687_4688_4689_4690_4691_4692_4693_4694_4695_4696_4697_4698_4699_4700_4701_4702_4703_4704_4705_4706_4707_4708_4709_4710_4711_4712_4713_4714_4715_4716_4717_4718_4719_4720_4721_4722_4723_4724_4725_4726_4727_4728_4729_4730_4731_4732_4733_4734_4735_4736_4737_4738_4739_4740_4741_4742_4743_4744_4745_4746_4747_4748_4749_4750_4751_4752_4753_4754_4755_4756_4757_4758_4759_4760_4761_4762_4763_4764_4765_4766_4767_4768_4769_4770_4771_4772_4773_4774_4775_4776_4777_4778_4779_4780_4781_4782_4783_4784_4785_4786_4787_4788_4789_4790_4791_4792_4793_4794_4795_4796_4797_4798_4799_4800_4801_4802_4803_4804_4805_4806_4807_4808_4809_4810_4811_4812_4813_4814_4815_4816_4817_4818_4819_4820_4821_4822_4823_4824_4825_4826_4827_4828_4829_4830_4831_4832_4833_4834_4835_4836_4837_4838_4839_4840_4841_4842_4843_4844_4845_4846_4847_4848_4849_4850_4851_4852_4853_4854_4855_4856_4857_4858_4859_4860_4861_4862_4863_4864_4865_4866_4867_4868_4869_4870_4871_4872_4873_4874_4875_4876_4877_4878_4879_4880_4881_4882_4883_4884_4885_4886_4887_4888_4889_4890_4891_4892_4893_4894_4895_4896_4897_4898_4899_4900_4901_4902_4903_4904_4905_4906_4907_4908_4909_4910_4911_4912_4913_4914_4915_4916_4917_4918_4919_4920_4921_4922_4923_4924_4925_4926_4927_4928_4929_4930_4931_4932_4933_4934_4935_4936_4937_4938_4939_4940_4941_4942_4943_4944_4945_4946_4947_4948_4949_4950_4951_4952_4953_4954_4955_4956_4957_4958_4959_4960_4961_4962_4963_4964_4965_4966_4967_4968_4969_4970_4971_4972_4973_4974_4975_4976_4977_4978_4979_4980_4981_4982_4983_4984_4985_4986_4987_4988_4989_4990_4991_4992_4993_4994_4995_4996_4997_4998_4999_5000_5001_5002_5003_5004_5005_5006_5007_5008_5009_5010_5011_5012_5013_5014_5015_5016_5017_5018_5019_5020_5021_5022_5023_5024_5025_5026_5027_5028_5029_5030_5031_5032_5033_5034_5035_5036_5037_5038_5039_5040_5041_5042_5043_5044_5045_5046_5047_5048_5049_5050_5051_5052_5053_5054_5055_5056_5057_5058_5059_5060_5061_5062_5063_5064_5065_5066_5067_5068_5069_5070_5071_5072_5073_5074_5075_5076_5077_5078_5079_5080_5081_5082_5083_5084_5085_5086_5087_5088_5089_5090_5091_5092_5093_5094_5095_5096_5097_5098_5099_5100_5101_5102_5103_5104_5105_5106_5107_5108_5109_5110_5111_5112_5113_5114_5115_5116_5117_5118_5119_5120_5121_5122_5123_5124_5125_5126_5127_5128_5129_5130_5131_5132_5133_5134_5135_5136_5137_5138_5139_5140_5141_5142_5143_5144_5145_5146_5147_5148_5149_5150_5151_5152_5153_5154_5155_5156_5157_5158_5159_5160_5161_5162_5163_5164_5165_5166_5167_5168_5169_5170_5171_5172_5173_5174_5175_5176_5177_5178_5179_5180_5181_5182_5183_5184_5185_5186_5187_5188_5189_5190_5191_5192_5193_5194_5195_5196_5197_5198_5199_5200_5201_5202_5203_5204_5205_5206_5207_5208_5209_5210_5211_5212_5213_5214_5215_5216_5217_5218_5219_5220_5221_5222_5223_5224_5225_5226_5227_5228_5229_5230_5231_5232_5233_5234_5235_5236_5237_5238_5239_5240_5241_5242_5243_5244_5245_5246_5247_5248_5249_5250_5251_5252_5253_5254_5255_5256_5257_5258_5259_5260_5261_5262_5263_5264_5265_5266_5267_5268_5269_5270_5271_5272_5273_5274_5275_5276_5277_5278_5279_5280_5281_5282_5283_5284_5285_5286_5287_5288_5289_5290_5291_5292_5293_5294_5295_5296_5297_5298_5299_5300_5301_5302_5303_5304_5305_5306_5307_5308_5309_5310_5311_5312_5313_5314_5315_5316_5317_5318_5319_5320_5321_5322_5323_5324_5325_5326_5327_5328_5329_5330_5331_5332_5333_5334_5335_5336_5337_5338_5339_5340_5341_5342_5343_5344_5345_5346_5347_5348_5349_5350_5351_5352_5353_5354_5355_5356_5357_5358_5359_5360_5361_5362_5363_5364_5365_5366_5367_5368_5369_5370_5371_5372_5373_5374_5375_5376_5377_5378_5379_5380_5381_5382_5383_5384_5385_5386_5387_5388_5389_5390_5391_5392_5393_5394_5395_5396_5397_5398_5399_5400_5401_5402_5403_5404_5405_5406_5407_5408_5409_5410_5411_5412_5413_5414_5415_5416_5417_5418_5419_5420_5421_5422_5423_5424_5425_5426_5427_5428_5429_5430_5431_5432_5433_5434_5435_5436_5437_5438_5439_5440_5441_5442_5443_5444_5445_5446_5447_5448_5449_5450_5451_5452_5453_5454_5455_5456_5457_5458_5459_5460_5461_5462_5463_5464_5465_5466_5467_5468_5469_5470_5471_5472_5473_5474_5475_5476_5477_5478_5479_5480_5481_5482_5483_5484_5485_5486_5487_5488_5489_5490_5491_5492_5493_5494_5495_5496_5497_5498_5499_5500_5501_5502_5503_5504_5505_5506_5507_5508_5509_5510_5511_5512_5513_5514_5515_5516_5517_5518_5519_5520_5521_5522_5523_5524_5525_5526_5527_5528_5529_5530_5531_5532_5533_5534_5535_5536_5537_5538_5539_5540_5541_5542_5543_5544_5545_5546_5547_5548_5549_5550_5551_5552_5553_5554_5555_5556_5557_5558_5559_5560_5561_5562_5563_5564_5565_5566_5567_5568_5569_5570_5571_5572_5573_5574_5575_5576_5577_5578_5579_5580_5581_5582_5583_5584_5585_5586_5587_5588_5589_5590_5591_5592_5593_5594_5595_5596_5597_5598_5599_5600_5601_5602_5603_5604_5605_5606_5607_5608_5609_5610_5611_5612_5613_5614_5615_5616_5617_5618_5619_5620_5621_5622_5623_5624_5625_5626_5627_5628_5629_5630_5631_5632_5633_5634_5635_5636_5637_5638_5639_5640_5641_5642_5643_5644_5645_5646_5647_5648_5649_5650_5651_5652_5653_5654_5655_5656_5657_5658_5659_5660_5661_5662_5663_5664_5665_5666_5667_5668_5669_5670_5671_5672_5673_5674_5675_5676_5677_5678_5679_5680_5681_5682_5683_5684_5685_5686_5687_5688_5689_5690_5691_5692_5693_5694_5695_5696_5697_5698_5699_5700_5701_5702_5703_5704_5705_5706_5707_5708_5709_5710_5711_5712_5713_5714_5715_5716_5717_5718_5719_5720_5721_5722_5723_5724_5725_5726_5727_5728_5729_5730_5731_5732_5733_5734_5735_5736_5737_5738_5739_5740_5741_5742_5743_5744_5745_5746_5747_5748_5749_5750_5751_5752_5753_5754_5755_5756_5757_5758_5759_5760_5761_5762_5763_5764_5765_5766_5767_5768_5769_5770_5771_5772_5773_5774_5775_5776_5777_5778_5779_5780_5781_5782_5783_5784_5785_5786_5787_5788_5789_5790_5791_5792_5793_5794_5795_5796_5797_5798_5799_5800_5801_5802_5803_5804_5805_5806_5807_5808_5809_5810_5811_5812_5813_5814_5815_5816_5817_5818_5819_5820_5821_5822_5823_5824_5825_5826_5827_5828_5829_5830_5831_5832_5833_5834_5835_5836_5837_5838_5839_5840_5841_5842_5843_5844_5845_5846_5847_5848_5849_5850_5851_5852_5853_5854_5855_5856_5857_5858_5859_5860_5861_5862_5863_5864_5865_5866_5867_5868_5869_5870_5871_5872_5873_5874_5875_5876_5877_5878_5879_5880_5881_5882_5883_5884_5885_5886_5887_5888_5889_5890_5891_5892_5893_5894_5895_5896_5897_5898_5899_5900_5901_5902_5903_5904_5905_5906_5907_5908_5909_5910_5911_5912_5913_5914_5915_5916_5917_5918_5919_5920_5921_5922_5923_5924_5925_5926_5927_5928_5929_5930_5931_5932_5933_5934_5935_5936_5937_5938_5939_5940_5941_5942_5943_5944_5945_5946_5947_5948_5949_5950_5951_5952_5953_5954_5955_5956_5957_5958_5959_5960_5961_5962_5963_5964_5965_5966_5967_5968_5969_5970_5971_5972_5973_5974_5975_5976_5977_5978_5979_5980_5981_5982_5983_5984_5985_5986_5987_5988_5989_5990_5991_5992_5993_5994_5995_5996_5997_5998_5999_6000_6001_6002_6003_6004_6005_6006_6007_6008_6009_6010_6011_6012_6013_6014_6015_6016_6017_6018_6019_6020_6021_6022_6023_6024_6025_6026_6027_6028_6029_6030_6031_6032_6033_6034_6035_6036_6037_6038_6039_6040_6041_6042_6043_6044_6045_6046_6047_6048_6049_6050_6051_6052_6053_6054_6055_6056_6057_6058_6059_6060_6061_6062_6063_6064_6065_6066_6067_6068_6069_6070_6071_6072_6073_6074_6075_6076_6077_6078_6079_6080_6081_6082_6083_6084_6085_6086_6087_6088_6089_6090_6091_6092_6093_6094_6095_6096_6097_6098_6099_6100_6101_6102_6103_6104_6105_6106_6107_6108_6109_6110_6111_6112_6113_6114_6115_6116_6117_6118_6119_6120_6121_6122_6123_6124_6125_6126_6127_6128_6129_6130_6131_6132_6133_6134_6135_6136_6137_6138_6139_6140_6141_6142_6143_6144_6145_6146_6147_6148_6149_6150_6151_6152_6153_6154_6155_6156_6157_6158_6159_6160_6161_6162_6163_6164_6165_6166_6167_6168_6169_6170_6171_6172_6173_6174_6175_6176_6177_6178_6179_6180_6181_6182_6183_6184_6185_6186_6187_6188_6189_6190_6191_6192_6193_6194_6195_6196_6197_6198_6199_6200_6201_6202_6203_6204_6205_6206_6207_6208_6209_6210_6211_6212_6213_6214_6215_6216_6217_6218_6219_6220_6221_6222_6223_6224_6225_6226_6227_6228_6229_6230_6231_6232_6233_6234_6235_6236_6237_6238_6239_6240_6241_6242_6243_6244_6245_6246_6247_6248_6249_6250_6251_6252_6253_6254_6255_6256_6257_6258_6259_6260_6261_6262_6263_6264_6265_6266_6267_6268_6269_6270_6271_6272_6273_6274_6275_6276_6277_6278_6279_6280_6281_6282_6283_6284_6285_6286_6287_6288_6289_6290_6291_6292_6293_6294_6295_6296_6297_6298_6299_6300_6301_6302_6303_6304_6305_6306_6307_6308_6309_6310_6311_6312_6313_6314_6315_6316_6317_6318_6319_6320_6321_6322_6323_6324_6325_6326_6327_6328_6329_6330_6331_6332_6333_6334_6335_6336_6337_6338_6339_6340_6341_6342_6343_6344_6345_6346_6347_6348_6349_6350_6351_6352_6353_6354_6355_6356_6357_6358_6359_6360_6361_6362_6363_6364_6365_6366_6367_6368_6369_6370_6371_6372_6373_6374_6375_6376_6377_6378_6379_6380_6381_6382_6383_6384_6385_6386_6387_6388_6389_6390_6391_6392_6393_6394_6395_6396_6397_6398_6399_6400_6401_6402_6403_6404_6405_6406_6407_6408_6409_6410_6411_6412_6413_6414_6415_6416_6417_6418_6419_6420_6421_6422_6423_6424_6425_6426_6427_6428_6429_6430_6431_6432_6433_6434_6435_6436_6437_6438_6439_6440_6441_6442_6443_6444_6445_6446_6447_6448_6449_6450_6451_6452_6453_6454_6455_6456_6457_6458_6459_6460_6461_6462_6463_6464_6465_6466_6467_6468_6469_6470_6471_6472_6473_6474_6475_6476_6477_6478_6479_6480_6481_6482_6483_6484_6485_6486_6487_6488_6489_6490_6491_6492_6493_6494_6495_6496_6497_6498_6499_6500_6501_6502_6503_6504_6505_6506_6507_6508_6509_6510_6511_6512_6513_6514_6515_6516_6517_6518_6519_6520_6521_6522_6523_6524_6525_6526_6527_6528_6529_6530_6531_6532_6533_6534_6535_6536_6537_6538_6539_6540_6541_6542_6543_6544_6545_6546_6547_6548_6549_6550_6551_6552_6553_6554_6555_6556_6557_6558_6559_6560_6561_6562_6563_6564_6565_6566_6567_6568_6569_6570_6571_6572_6573_6574_6575_6576_6577_6578_6579_6580_6581_6582_6583_6584_6585_6586_6587_6588_6589_6590_6591_6592_6593_6594_6595_6596_6597_6598_6599_6600_6601_6602_6603_6604_6605_6606_6607_6608_6609_6610_6611_6612_6613_6614_6615_6616_6617_6618_6619_6620_6621_6622_6623_6624_6625_6626_6627_6628_6629_6630_6631_6632_6633_6634_6635_6636_6637_6638_6639_6640_6641_6642_6643_6644_6645_6646_6647_6648_6649_6650_6651_6652_6653_6654_6655_6656_6657_6658_6659_6660_6661_6662_6663_6664_6665_6666_6667_6668_6669_6670_6671_6672_6673_6674_6675_6676_6677_6678_6679_6680_6681_6682_6683_6684_6685_6686_6687_6688_6689_6690_6691_6692_6693_6694_6695_6696_6697_6698_6699_6700_6701_6702_6703_6704_6705_6706_6707_6708_6709_6710_6711_6712_6713_6714_6715_6716_6717_6718_6719_6720_6721_6722_6723_6724_6725_6726_6727_6728_6729_6730_6731_6732_6733_6734_6735_6736_6737_6738_6739_6740_6741_6742_6743_6744_6745_6746_6747_6748_6749_6750_6751_6752_6753_6754_6755_6756_6757_6758_6759_6760_6761_6762_6763_6764_6765_6766_6767_6768_6769_6770_6771_6772_6773_6774_6775_6776_6777_6778_6779_6780_6781_6782_6783_6784_6785_6786_6787_6788_6789_6790_6791_6792_6793_6794_6795_6796_6797_6798_6799_6800_6801_6802_6803_6804_6805_6806_6807_6808_6809_6810_6811_6812_6813_6814_6815_6816_6817_6818_6819_6820_6821_6822_6823_6824_6825_6826_6827_6828_6829_6830_6831_6832_6833_6834_6835_6836_6837_6838_6839_6840_6841_6842_6843_6844_6845_6846_6847_6848_6849_6850_6851_6852_6853_6854_6855_6856_6857_6858_6859_6860_6861_6862_6863_6864_6865_6866_6867_6868_6869_6870_6871_6872_6873_6874_6875_6876_6877_6878_6879_6880_6881_6882_6883_6884_6885_6886_6887_6888_6889_6890_6891_6892_6893_6894_6895_6896_6897_6898_6899_6900_6901_6902_6903_6904_6905_6906_6907_6908_6909_6910_6911_6912_6913_6914_6915_6916_6917_6918_6919_6920_6921_6922_6923_6924_6925_6926_6927_6928_6929_6930_6931_6932_6933_6934_6935_6936_6937_6938_6939_6940_6941_6942_6943_6944_6945_6946_6947_6948_6949_6950_6951_6952_6953_6954_6955_6956_6957_6958_6959_6960_6961_6962_6963_6964_6965_6966_6967_6968_6969_6970_6971_6972_6973_6974_6975_6976_6977_6978_6979_6980_6981_6982_6983_6984_6985_6986_6987_6988_6989_6990_6991_6992_6993_6994_6995_6996_6997_6998_6999_7000_7001_7002_7003_7004_7005_7006_7007_7008_7009_7010_7011_7012_7013_7014_7015_7016_7017_7018_7019_7020_7021_7022_7023_7024_7025_7026_7027_7028_7029_7030_7031_7032_7033_7034_7035_7036_7037_7038_7039_7040_7041_7042_7043_7044_7045_7046_7047_7048_7049_7050_7051_7052_7053_7054_7055_7056_7057_7058_7059_7060_7061_7062_7063_7064_7065_7066_7067_7068_7069_7070_7071_7072_7073_7074_7075_7076_7077_7078_7079_7080_7081_7082_7083_7084_7085_7086_7087_7088_7089_7090_7091_7092_7093_7094_7095_7096_7097_7098_7099_7100_7101_7102_7103_7104_7105_7106_7107_7108_7109_7110_7111_7112_7113_7114_7115_7116_7117_7118_7119_7120_7121_7122_7123_7124_7125_7126_7127_7128_7129_7130_7131_7132_7133_7134_7135_7136_7137_7138_7139_7140_7141_7142_7143_7144_7145_7146_7147_7148_7149_7150_7151_7152_7153_7154_7155_7156_7157_7158_7159_7160_7161_7162_7163_7164_7165_7166_7167_7168_7169_7170_7171_7172_7173_7174_7175_7176_7177_7178_7179_7180_7181_7182_7183_7184_7185_7186_7187_7188_7189_7190_7191_7192_7193_7194_7195_7196_7197_7198_7199_7200_7201_7202_7203_7204_7205_7206_7207_7208_7209_7210_7211_7212_7213_7214_7215_7216_7217_7218_7219_7220_7221_7222_7223_7224_7225_7226_7227_7228_7229_7230_7231_7232_7233_7234_7235_7236_7237_7238_7239_7240_7241_7242_7243_7244_7245_7246_7247_7248_7249_7250_7251_7252_7253_7254_7255_7256_7257_7258_7259_7260_7261_7262_7263_7264_7265_7266_7267_7268_7269_7270_7271_7272_7273_7274_7275_7276_7277_7278_7279_7280_7281_7282_7283_7284_7285_7286_7287_7288_7289_7290_7291_7292_7293_7294_7295_7296_7297_7298_7299_7300_7301_7302_7303_7304_7305_7306_7307_7308_7309_7310_7311_7312_7313_7314_7315_7316_7317_7318_7319_7320_7321_7322_7323_7324_7325_7326_7327_7328_7329_7330_7331_7332_7333_7334_7335_7336_7337_7338_7339_7340_7341_7342_7343_7344_7345_7346_7347_7348_7349_7350_7351_7352_7353_7354_7355_7356_7357_7358_7359_7360_7361_7362_7363_7364_7365_7366_7367_7368_7369_7370_7371_7372_7373_7374_7375_7376_7377_7378_7379_7380_7381_7382_7383_7384_7385_7386_7387_7388_7389_7390_7391_7392_7393_7394_7395_7396_7397_7398_7399_7400_7401_7402_7403_7404_7405_7406_7407_7408_7409_7410_7411_7412_7413_7414_7415_7416_7417_7418_7419_7420_7421_7422_7423_7424_7425_7426_7427_7428_7429_7430_7431_7432_7433_7434_7435_7436_7437_7438_7439_7440_7441_7442_7443_7444_7445_7446_7447_7448_7449_7450_7451_7452_7453_7454_7455_7456_7457_7458_7459_7460_7461_7462_7463_7464_7465_7466_7467_7468_7469_7470_7471_7472_7473_7474_7475_7476_7477_7478_7479_7480_7481_7482_7483_7484_7485_7486_7487_7488_7489_7490_7491_7492_7493_7494_7495_7496_7497_7498_7499_7500_7501_7502_7503_7504_7505_7506_7507_7508_7509_7510_7511_7512_7513_7514_7515_7516_7517_7518_7519_7520_7521_7522_7523_7524_7525_7526_7527_7528_7529_7530_7531_7532_7533_7534_7535_7536_7537_7538_7539_7540_7541_7542_7543_7544_7545_7546_7547_7548_7549_7550_7551_7552_7553_7554_7555_7556_7557_7558_7559_7560_7561_7562_7563_7564_7565_7566_7567_7568_7569_7570_7571_7572_7573_7574_7575_7576_7577_7578_7579_7580_7581_7582_7583_7584_7585_7586_7587_7588_7589_7590_7591_7592_7593_7594_7595_7596_7597_7598_7599_7600_7601_7602_7603_7604_7605_7606_7607_7608_7609_7610_7611_7612_7613_7614_7615_7616_7617_7618_7619_7620_7621_7622_7623_7624_7625_7626_7627_7628_7629_7630_7631_7632_7633_7634_7635_7636_7637_7638_7639_7640_7641_7642_7643_7644_7645_7646_7647_7648_7649_7650_7651_7652_7653_7654_7655_7656_7657_7658_7659_7660_7661_7662_7663_7664_7665_7666_7667_7668_7669_7670_7671_7672_7673_7674_7675_7676_7677_7678_7679_7680_7681_7682_7683_7684_7685_7686_7687_7688_7689_7690_7691_7692_7693_7694_7695_7696_7697_7698_7699_7700_7701_7702_7703_7704_7705_7706_7707_7708_7709_7710_7711_7712_7713_7714_7715_7716_7717_7718_7719_7720_7721_7722_7723_7724_7725_7726_7727_7728_7729_7730_7731_7732_7733_7734_7735_7736_7737_7738_7739_7740_7741_7742_7743_7744_7745_7746_7747_7748_7749_7750_7751_7752_7753_7754_7755_7756_7757_7758_7759_7760_7761_7762_7763_7764_7765_7766_7767_7768_7769_7770_7771_7772_7773_7774_7775_7776_7777_7778_7779_7780_7781_7782_7783_7784_7785_7786_7787_7788_7789_7790_7791_7792_7793_7794_7795_7796_7797_7798_7799_7800_7801_7802_7803_7804_7805_7806_7807_7808_7809_7810_7811_7812_7813_7814_7815_7816_7817_7818_7819_7820_7821_7822_7823_7824_7825_7826_7827_7828_7829_7830_7831_7832_7833_7834_7835_7836_7837_7838_7839_7840_7841_7842_7843_7844_7845_7846_7847_7848_7849_7850_7851_7852_7853_7854_7855_7856_7857_7858_7859_7860_7861_7862_7863_7864_7865_7866_7867_7868_7869_7870_7871_7872_7873_7874_7875_7876_7877_7878_7879_7880_7881_7882_7883_7884_7885_7886_7887_7888_7889_7890_7891_7892_7893_7894_7895_7896_7897_7898_7899_7900_7901_7902_7903_7904_7905_7906_7907_7908_7909_7910_7911_7912_7913_7914_7915_7916_7917_7918_7919_7920_7921_7922_7923_7924_7925_7926_7927_7928_7929_7930_7931_7932_7933_7934_7935_7936_7937_7938_7939_7940_7941_7942_7943_7944_7945_7946_7947_7948_7949_7950_7951_7952_7953_7954_7955_7956_7957_7958_7959_7960_7961_7962_7963_7964_7965_7966_7967_7968_7969_7970_7971_7972_7973_7974_7975_7976_7977_7978_7979_7980_7981_7982_7983_7984_7985_7986_7987_7988_7989_7990_7991_7992_7993_7994_7995_7996_7997_7998_7999_8000_8001_8002_8003_8004_8005_8006_8007_8008_8009_8010_8011_8012_8013_8014_8015_8016_8017_8018_8019_8020_8021_8022_8023_8024_8025_8026_8027_8028_8029_8030_8031_8032_8033_8034_8035_8036_8037_8038_8039_8040_8041_8042_8043_8044_8045_8046_8047_8048_8049_8050_8051_8052_8053_8054_8055_8056_8057_8058_8059_8060_8061_8062_8063_8064_8065_8066_8067_8068_8069_8070_8071_8072_8073_8074_8075_8076_8077_8078_8079_8080_8081_8082_8083_8084_8085_8086_8087_8088_8089_8090_8091_8092_8093_8094_8095_8096_8097_8098_8099_8100_8101_8102_8103_8104_8105_8106_8107_8108_8109_8110_8111_8112_8113_8114_8115_8116_8117_8118_8119_8120_8121_8122_8123_8124_8125_8126_8127_8128_8129_8130_8131_8132_8133_8134_8135_8136_8137_8138_8139_8140_8141_8142_8143_8144_8145_8146_8147_8148_8149_8150_8151_8152_8153_8154_8155_8156_8157_8158_8159_8160_8161_8162_8163_8164_8165_8166_8167_8168_8169_8170_8171_8172_8173_8174_8175_8176_8177_8178_8179_8180_8181_8182_8183_8184_8185_8186_8187_8188_8189_8190_8191_8192_8193_8194_8195_8196_8197_8198_8199_8200_8201_8202_8203_8204_8205_8206_8207_8208_8209_8210_8211_8212_8213_8214_8215_8216_8217_8218_8219_8220_8221_8222_8223_8224_8225_8226_8227_8228_8229_8230_8231_8232_8233_8234_8235_8236_8237_8238_8239_8240_8241_8242_8243_8244_8245_8246_8247_8248_8249_8250_8251_8252_8253_8254_8255_8256_8257_8258_8259_8260_8261_8262_8263_8264_8265_8266_8267_8268_8269_8270_8271_8272_8273_8274_8275_8276_8277_8278_8279_8280_8281_8282_8283_8284_8285_8286_8287_8288_8289_8290_8291_8292_8293_8294_8295_8296_8297_8298_8299_8300_8301_8302_8303_8304_8305_8306_8307_8308_8309_8310_8311_8312_8313_8314_8315_8316_8317_8318_8319_8320_8321_8322_8323_8324_8325_8326_8327_8328_8329_8330_8331_8332_8333_8334_8335_8336_8337_8338_8339_8340_8341_8342_8343_8344_8345_8346_8347_8348_8349_8350_8351_8352_8353_8354_8355_8356_8357_8358_8359_8360_8361_8362_8363_8364_8365_8366_8367_8368_8369_8370_8371_8372_8373_8374_8375_8376_8377_8378_8379_8380_8381_8382_8383_8384_8385_8386_8387_8388_8389_8390_8391_8392_8393_8394_8395_8396_8397_8398_8399_8400_8401_8402_8403_8404_8405_8406_8407_8408_8409_8410_8411_8412_8413_8414_8415_8416_8417_8418_8419_8420_8421_8422_8423_8424_8425_8426_8427_8428_8429_8430_8431_8432_8433_8434_8435_8436_8437_8438_8439_8440_8441_8442_8443_8444_8445_8446_8447_8448_8449_8450_8451_8452_8453_8454_8455_8456_8457_8458_8459_8460_8461_8462_8463_8464_8465_8466_8467_8468_8469_8470_8471_8472_8473_8474_8475_8476_8477_8478_8479_8480_8481_8482_8483_8484_8485_8486_8487_8488_8489_8490_8491_8492_8493_8494_8495_8496_8497_8498_8499_8500_8501_8502_8503_8504_8505_8506_8507_8508_8509_8510_8511_8512_8513_8514_8515_8516_8517_8518_8519_8520_8521_8522_8523_8524_8525_8526_8527_8528_8529_8530_8531_8532_8533_8534_8535_8536_8537_8538_8539_8540_8541_8542_8543_8544_8545_8546_8547_8548_8549_8550_8551_8552_8553_8554_8555_8556_8557_8558_8559_8560_8561_8562_8563_8564_8565_8566_8567_8568_8569_8570_8571_8572_8573_8574_8575_8576_8577_8578_8579_8580_8581_8582_8583_8584_8585_8586_8587_8588_8589_8590_8591_8592_8593_8594_8595_8596_8597_8598_8599_8600_8601_8602_8603_8604_8605_8606_8607_8608_8609_8610_8611_8612_8613_8614_8615_8616_8617_8618_8619_8620_8621_8622_8623_8624_8625_8626_8627_8628_8629_8630_8631_8632_8633_8634_8635_8636_8637_8638_8639_8640_8641_8642_8643_8644_8645_8646_8647_8648_8649_8650_8651_8652_8653_8654_8655_8656_8657_8658_8659_8660_8661_8662_8663_8664_8665_8666_8667_8668_8669_8670_8671_8672_8673_8674_8675_8676_8677_8678_8679_8680_8681_8682_8683_8684_8685_8686_8687_8688_8689_8690_8691_8692_8693_8694_8695_8696_8697_8698_8699_8700_8701_8702_8703_8704_8705_8706_8707_8708_8709_8710_8711_8712_8713_8714_8715_8716_8717_8718_8719_8720_8721_8722_8723_8724_8725_8726_8727_8728_8729_8730_8731_8732_8733_8734_8735_8736_8737_8738_8739_8740_8741_8742_8743_8744_8745_8746_8747_8748_8749_8750_8751_8752_8753_8754_8755_8756_8757_8758_8759_8760_8761_8762_8763_8764_8765_8766_8767_8768_8769_8770_8771_8772_8773_8774_8775_8776_8777_8778_8779_8780_8781_8782_8783_8784_8785_8786_8787_8788_8789_8790_8791_8792_8793_8794_8795_8796_8797_8798_8799_8800_8801_8802_8803_8804_8805_8806_8807_8808_8809_8810_8811_8812_8813_8814_8815_8816_8817_8818_8819_8820_8821_8822_8823_8824_8825_8826_8827_8828_8829_8830_8831_8832_8833_8834_8835_8836_8837_8838_8839_8840_8841_8842_8843_8844_8845_8846_8847_8848_8849_8850_8851_8852_8853_8854_8855_8856_8857_8858_8859_8860_8861_8862_8863_8864_8865_8866_8867_8868_8869_8870_8871_8872_8873_8874_8875_8876_8877_8878_8879_8880_8881_8882_8883_8884_8885_8886_8887_8888_8889_8890_8891_8892_8893_8894_8895_8896_8897_8898_8899_8900_8901_8902_8903_8904_8905_8906_8907_8908_8909_8910_8911_8912_8913_8914_8915_8916_8917_8918_8919_8920_8921_8922_8923_8924_8925_8926_8927_8928_8929_8930_8931_8932_8933_8934_8935_8936_8937_8938_8939_8940_8941_8942_8943_8944_8945_8946_8947_8948_8949_8950_8951_8952_8953_8954_8955_8956_8957_8958_8959_8960_8961_8962_8963_8964_8965_8966_8967_8968_8969_8970_8971_8972_8973_8974_8975_8976_8977_8978_8979_8980_8981_8982_8983_8984_8985_8986_8987_8988_8989_8990_8991_8992_8993_8994_8995_8996_8997_8998_8999_9000_9001_9002_9003_9004_9005_9006_9007_9008_9009_9010_9011_9012_9013_9014_9015_9016_9017_9018_9019_9020_9021_9022_9023_9024_9025_9026_9027_9028_9029_9030_9031_9032_9033_9034_9035_9036_9037_9038_9039_9040_9041_9042_9043_9044_9045_9046_9047_9048_9049_9050_9051_9052_9053_9054_9055_9056_9057_9058_9059_9060_9061_9062_9063_9064_9065_9066_9067_9068_9069_9070_9071_9072_9073_9074_9075_9076_9077_9078_9079_9080_9081_9082_9083_9084_9085_9086_9087_9088_9089_9090_9091_9092_9093_9094_9095_9096_9097_9098_9099_9100_9101_9102_9103_9104_9105_9106_9107_9108_9109_9110_9111_9112_9113_9114_9115_9116_9117_9118_9119_9120_9121_9122_9123_9124_9125_9126_9127_9128_9129_9130_9131_9132_9133_9134_9135_9136_9137_9138_9139_9140_9141_9142_9143_9144_9145_9146_9147_9148_9149_9150_9151_9152_9153_9154_9155_9156_9157_9158_9159_9160_9161_9162_9163_9164_9165_9166_9167_9168_9169_9170_9171_9172_9173_9174_9175_9176_9177_9178_9179_9180_9181_9182_9183_9184_9185_9186_9187_9188_9189_9190_9191_9192_9193_9194_9195_9196_9197_9198_9199_9200_9201_9202_9203_9204_9205_9206_9207_9208_9209_9210_9211_9212_9213_9214_9215_9216_9217_9218_9219_9220_9221_9222_9223_9224_9225_9226_9227_9228_9229_9230_9231_9232_9233_9234_9235_9236_9237_9238_9239_9240_9241_9242_9243_9244_9245_9246_9247_9248_9249_9250_9251_9252_9253_9254_9255_9256_9257_9258_9259_9260_9261_9262_9263_9264_9265_9266_9267_9268_9269_9270_9271_9272_9273_9274_9275_9276_9277_9278_9279_9280_9281_9282_9283_9284_9285_9286_9287_9288_9289_9290_9291_9292_9293_9294_9295_9296_9297_9298_9299_9300_9301_9302_9303_9304_9305_9306_9307_9308_9309_9310_9311_9312_9313_9314_9315_9316_9317_9318_9319_9320_9321_9322_9323_9324_9325_9326_9327_9328_9329_9330_9331_9332_9333_9334_9335_9336_9337_9338_9339_9340_9341_9342_9343_9344_9345_9346_9347_9348_9349_9350_9351_9352_9353_9354_9355_9356_9357_9358_9359_9360_9361_9362_9363_9364_9365_9366_9367_9368_9369_9370_9371_9372_9373_9374_9375_9376_9377_9378_9379_9380_9381_9382_9383_9384_9385_9386_9387_9388_9389_9390_9391_9392_9393_9394_9395_9396_9397_9398_9399_9400_9401_9402_9403_9404_9405_9406_9407_9408_9409_9410_9411_9412_9413_9414_9415_9416_9417_9418_9419_9420_9421_9422_9423_9424_9425_9426_9427_9428_9429_9430_9431_9432_9433_9434_9435_9436_9437_9438_9439_9440_9441_9442_9443_9444_9445_9446_9447_9448_9449_9450_9451_9452_9453_9454_9455_9456_9457_9458_9459_9460_9461_9462_9463_9464_9465_9466_9467_9468_9469_9470_9471_9472_9473_9474_9475_9476_9477_9478_9479_9480_9481_9482_9483_9484_9485_9486_9487_9488_9489_9490_9491_9492_9493_9494_9495_9496_9497_9498_9499_9500_9501_9502_9503_9504_9505_9506_9507_9508_9509_9510_9511_9512_9513_9514_9515_9516_9517_9518_9519_9520_9521_9522_9523_9524_9525_9526_9527_9528_9529_9530_9531_9532_9533_9534_9535_9536_9537_9538_9539_9540_9541_9542_9543_9544_9545_9546_9547_9548_9549_9550_9551_9552_9553_9554_9555_9556_9557_9558_9559_9560_9561_9562_9563_9564_9565_9566_9567_9568_9569_9570_9571_9572_9573_9574_9575_9576_9577_9578_9579_9580_9581_9582_9583_9584_9585_9586_9587_9588_9589_9590_9591_9592_9593_9594_9595_9596_9597_9598_9599_9600_9601_9602_9603_9604_9605_9606_9607_9608_9609_9610_9611_9612_9613_9614_9615_9616_9617_9618_9619_9620_9621_9622_9623_9624_9625_9626_9627_9628_9629_9630_9631_9632_9633_9634_9635_9636_9637_9638_9639_9640_9641_9642_9643_9644_9645_9646_9647_9648_9649_9650_9651_9652_9653_9654_9655_9656_9657_9658_9659_9660_9661_9662_9663_9664_9665_9666_9667_9668_9669_9670_9671_9672_9673_9674_9675_9676_9677_9678_9679_9680_9681_9682_9683_9684_9685_9686_9687_9688_9689_9690_9691_9692_9693_9694_9695_9696_9697_9698_9699_9700_9701_9702_9703_9704_9705_9706_9707_9708_9709_9710_9711_9712_9713_9714_9715_9716_9717_9718_9719_9720_9721_9722_9723_9724_9725_9726_9727_9728_9729_9730_9731_9732_9733_9734_9735_9736_9737_9738_9739_9740_9741_9742_9743_9744_9745_9746_9747_9748_9749_9750_9751_9752_9753_9754_9755_9756_9757_9758_9759_9760_9761_9762_9763_9764_9765_9766_9767_9768_9769_9770_9771_9772_9773_9774_9775_9776_9777_9778_9779_9780_9781_9782_9783_9784_9785_9786_9787_9788_9789_9790_9791_9792_9793_9794_9795_9796_9797_9798_9799_9800_9801_9802_9803_9804_9805_9806_9807_9808_9809_9810_9811_9812_9813_9814_9815_9816_9817_9818_9819_9820_9821_9822_9823_9824_9825_9826_9827_9828_9829_9830_9831_9832_9833_9834_9835_9836_9837_9838_9839_9840_9841_9842_9843_9844_9845_9846_9847_9848_9849_9850_9851_9852_9853_9854_9855_9856_9857_9858_9859_9860_9861_9862_9863_9864_9865_9866_9867_9868_9869_9870_9871_9872_9873_9874_9875_9876_9877_9878_9879_9880_9881_9882_9883_9884_9885_9886_9887_9888_9889_9890_9891_9892_9893_9894_9895_9896_9897_9898_9899_9900_9901_9902_9903_9904_9905_9906_9907_9908_9909_9910_9911_9912_9913_9914_9915_9916_9917_9918_9919_9920_9921_9922_9923_9924_9925_9926_9927_9928_9929_9930_9931_9932_9933_9934_9935_9936_9937_9938_9939_9940_9941_9942_9943_9944_9945_9946_9947_9948_9949_9950_9951_9952_9953_9954_9955_9956_9957_9958_9959_9960_9961_9962_9963_9964_9965_9966_9967_9968_9969_9970_9971_9972_9973_9974_9975_9976_9977_9978_9979_9980_9981_9982_9983_9984_9985_9986_9987_9988_9989_9990_9991_9992_9993_9994_9995_9996_9997_9998_9999_10000_10001_10002_10003_10004_10005_10006_10007_10008_10009_10010_10011_10012_10013_10014_10015_10016_10017_10018_10019_10020_10021_10022_10023_10024_10025_10026_10027_10028_10029_10030_10031_10032_10033_10034_10035_10036_10037_10038_10039_10040_10041_10042_10043_10044_10045_10046_10047_10048_10049_10050_10051_10052_10053_10054_10055_10056_10057_10058_10059_10060_10061_10062_10063_10064_10065_10066_10067_10068_10069_10070_10071_10072_10073_10074_10075_10076_10077_10078_10079_10080_10081_10082_10083_10084_10085_10086_10087_10088_10089_10090_10091_10092_10093_10094_10095_10096_10097_10098_10099_10100_10101_10102_10103_10104_10105_10106_10107_10108_10109_10110_10111_10112_10113_10114_10115_10116_10117_10118_10119_10120_10121_10122_10123_10124_10125_10126_10127_10128_10129_10130_10131_10132_10133_10134_10135_10136_10137_10138_10139_10140_10141_10142_10143_10144_10145_10146_10147_10148_10149_10150_10151_10152_10153_10154_10155_10156_10157_10158_10159_10160_10161_10162_10163_10164_10165_10166_10167_10168_10169_10170_10171_10172_10173_10174_10175_10176_10177_10178_10179_10180_10181_10182_10183_10184_10185_10186_10187_10188_10189_10190_10191_10192_10193_10194_10195_10196_10197_10198_10199_10200_10201_10202_10203_10204_10205_10206_10207_10208_10209_10210_10211_10212_10213_10214_10215_10216_10217_10218_10219_10220_10221_10222_10223_10224_10225_10226_10227_10228_10229_10230_10231_10232_10233_10234_10235_10236_10237_10238_10239_10240_10241_10242_10243_10244_10245_10246_10247_10248_10249_10250_10251_10252_10253_10254_10255_10256_10257_10258_10259_10260_10261_10262_10263_10264_10265_10266_10267_10268_10269_10270_10271_10272_10273_10274_10275_10276_10277_10278_10279_10280_10281_10282_10283_10284_10285_10286_10287_10288_10289_10290_10291_10292_10293_10294_10295_10296_10297_10298_10299_10300_10301_10302_10303_10304_10305_10306_10307_10308_10309_10310_10311_10312_10313_10314_10315_10316_10317_10318_10319_10320_10321_10322_10323_10324_10325_10326_10327_10328_10329_10330_10331_10332_10333_10334_10335_10336_10337_10338_10339_10340_10341_10342_10343_10344_10345_10346_10347_10348_10349_10350_10351_10352_10353_10354_10355_10356_10357_10358_10359_10360_10361_10362_10363_10364_10365_10366_10367_10368_10369_10370_10371_10372_10373_10374_10375_10376_10377_10378_10379_10380_10381_10382_10383_10384_10385_10386_10387_10388_10389_10390_10391_10392_10393_10394_10395_10396_10397_10398_10399_10400_10401_10402_10403_10404_10405_10406_10407_10408_10409_10410_10411_10412_10413_10414_10415_10416_10417_10418_10419_10420_10421_10422_10423_10424_10425_10426_10427_10428_10429_10430_10431_10432_10433_10434_10435_10436_10437_10438_10439_10440_10441_10442_10443_10444_10445_10446_10447_10448_10449_10450_10451_10452_10453_10454_10455_10456_10457_10458_10459_10460_10461_10462_10463_10464_10465_10466_10467_10468_10469_10470_10471_10472_10473_10474_10475_10476_10477_10478_10479_10480_10481_10482_10483_10484_10485_10486_10487_10488_10489_10490_10491_10492_10493_10494_10495_10496_10497_10498_10499_10500_10501_10502_10503_10504_10505_10506_10507_10508_10509_10510_10511_10512_10513_10514_10515_10516_10517_10518_10519_10520_10521_10522_10523_10524_10525_10526_10527_10528_10529_10530_10531_10532_10533_10534_10535_10536_10537_10538_10539_10540_10541_10542_10543_10544_10545_10546_10547_10548_10549_10550_10551_10552_10553_10554_10555_10556_10557_10558_10559_10560_10561_10562_10563_10564_10565_10566_10567_10568_10569_10570_10571_10572_10573_10574_10575_10576_10577_10578_10579_10580_10581_10582_10583_10584_10585_10586_10587_10588_10589_10590_10591_10592_10593_10594_10595_10596_10597_10598_10599_10600_10601_10602_10603_10604_10605_10606_10607_10608_10609_10610_10611_10612_10613_10614_10615_10616_10617_10618_10619_10620_10621_10622_10623_10624_10625_10626_10627_10628_10629_10630_10631_10632_10633_10634_10635_10636_10637_10638_10639_10640_10641_10642_10643_10644_10645_10646_10647_10648_10649_10650_10651_10652_10653_10654_10655_10656_10657_10658_10659_10660_10661_10662_10663_10664_10665_10666_10667_10668_10669_10670_10671_10672_10673_10674_10675_10676_10677_10678_10679_10680_10681_10682_10683_10684_10685_10686_10687_10688_10689_10690_10691_10692_10693_10694_10695_10696_10697_10698_10699_10700_10701_10702_10703_10704_10705_10706_10707_10708_10709_10710_10711_10712_10713_10714_10715_10716_10717_10718_10719_10720_10721_10722_10723_10724_10725_10726_10727_10728_10729_10730_10731_10732_10733_10734_10735_10736_10737_10738_10739_10740_10741_10742_10743_10744_10745_10746_10747_10748_10749_10750_10751_10752_10753_10754_10755_10756_10757_10758_10759_10760_10761_10762_10763_10764_10765_10766_10767_10768_10769_10770_10771_10772_10773_10774_10775_10776_10777_10778_10779_10780_10781_10782_10783_10784_10785_10786_10787_10788_10789_10790_10791_10792_10793_10794_10795_10796_10797_10798_10799_10800_10801_10802_10803_10804_10805_10806_10807_10808_10809_10810_10811_10812_10813_10814_10815_10816_10817_10818_10819_10820_10821_10822_10823_10824_10825_10826_10827_10828_10829_10830_10831_10832_10833_10834_10835_10836_10837_10838_10839_10840_10841_10842_10843_10844_10845_10846_10847_10848_10849_10850_10851_10852_10853_10854_10855_10856_10857_10858_10859_10860_10861_10862_10863_10864_10865_10866_10867_10868_10869_10870_10871_10872_10873_10874_10875_10876_10877_10878_10879_10880_10881_10882_10883_10884_10885_10886_10887_10888_10889_10890_10891_10892_10893_10894_10895_10896_10897_10898_10899_10900_10901_10902_10903_10904_10905_10906_10907_10908_10909_10910_10911_10912_10913_10914_10915_10916_10917_10918_10919_10920_10921_10922_10923_10924_10925_10926_10927_10928_10929_10930_10931_10932_10933_10934_10935_10936_10937_10938_10939_10940_10941_10942_10943_10944_10945_10946_10947_10948_10949_10950_10951_10952_10953_10954_10955_10956_10957_10958_10959_10960_10961_10962_10963_10964_10965_10966_10967_10968_10969_10970_10971_10972_10973_10974_10975_10976_10977_10978_10979_10980_10981_10982_10983_10984_10985_10986_10987_10988_10989_10990_10991_10992_10993_10994_10995_10996_10997_10998_10999_11000_11001_11002_11003_11004_11005_11006_11007_11008_11009_11010_11011_11012_11013_11014_11015_11016_11017_11018_11019_11020_11021_11022_11023_11024_11025_11026_11027_11028_11029_11030_11031_11032_11033_11034_11035_11036_11037_11038_11039_11040_11041_11042_11043_11044_11045_11046_11047_11048_11049_11050_11051_11052_11053_11054_11055_11056_11057_11058_11059_11060_11061_11062_11063_11064_11065_11066_11067_11068_11069_11070_11071_11072_11073_11074_11075_11076_11077_11078_11079_11080_11081_11082_11083_11084_11085_11086_11087_11088_11089_11090_11091_11092_11093_11094_11095_11096_11097_11098_11099_11100_11101_11102_11103_11104_11105_11106_11107_11108_11109_11110_11111_11112_11113_11114_11115_11116_11117_11118_11119_11120_11121_11122_11123_11124_11125_11126_11127_11128_11129_11130_11131_11132_11133_11134_11135_11136_11137_11138_11139_11140_11141_11142_11143_11144_11145_11146_11147_11148_11149_11150_11151_11152_11153_11154_11155_11156_11157_11158_11159_11160_11161_11162_11163_11164_11165_11166_11167_11168_11169_11170_11171_11172_11173_11174_11175_11176_11177_11178_11179_11180_11181_11182_11183_11184_11185_11186_11187_11188_11189_11190_11191_11192_11193_11194_11195_11196_11197_11198_11199_11200_11201_11202_11203_11204_11205_11206_11207_11208_11209_11210_11211_11212_11213_11214_11215_11216_11217_11218_11219_11220_11221_11222_11223_11224_11225_11226_11227_11228_11229_11230_11231_11232_11233_11234_11235_11236_11237_11238_11239_11240_11241_11242_11243_11244_11245_11246_11247_11248_11249_11250_11251_11252_11253_11254_11255_11256_11257_11258_11259_11260_11261_11262_11263_11264_11265_11266_11267_11268_11269_11270_11271_11272_11273_11274_11275_11276_11277_11278_11279_11280_11281_11282_11283_11284_11285_11286_11287_11288_11289_11290_11291_11292_11293_11294_11295_11296_11297_11298_11299_11300_11301_11302_11303_11304_11305_11306_11307_11308_11309_11310_11311_11312_11313_11314_11315_11316_11317_11318_11319_11320_11321_11322_11323_11324_11325_11326_11327_11328_11329_11330_11331_11332_11333_11334_11335_11336_11337_11338_11339_11340_11341_11342_11343_11344_11345_11346_11347_11348_11349_11350_11351_11352_11353_11354_11355_11356_11357_11358_11359_11360_11361_11362_11363_11364_11365_11366_11367_11368_11369_11370_11371_11372_11373_11374_11375_11376_11377_11378_11379_11380_11381_11382_11383_11384_11385_11386_11387_11388_11389_11390_11391_11392_11393_11394_11395_11396_11397_11398_11399_11400_11401_11402_11403_11404_11405_11406_11407_11408_11409_11410_11411_11412_11413_11414_11415_11416_11417_11418_11419_11420_11421_11422_11423_11424_11425_11426_11427_11428_11429_11430_11431_11432_11433_11434_11435_11436_11437_11438_11439_11440_11441_11442_11443_11444_11445_11446_11447_11448_11449_11450_11451_11452_11453_11454_11455_11456_11457_11458_11459_11460_11461_11462_11463_11464_11465_11466_11467_11468_11469_11470_11471_11472_11473_11474_11475_11476_11477_11478_11479_11480_11481_11482_11483_11484_11485_11486_11487_11488_11489_11490_11491_11492_11493_11494_11495_11496_11497_11498_11499_11500_11501_11502_11503_11504_11505_11506_11507_11508_11509_11510_11511_11512_11513_11514_11515_11516_11517_11518_11519_11520_11521_11522_11523_11524_11525_11526_11527_11528_11529_11530_11531_11532_11533_11534_11535_11536_11537_11538_11539_11540_11541_11542_11543_11544_11545_11546_11547_11548_11549_11550_11551_11552_11553_11554_11555_11556_11557_11558_11559_11560_11561_11562_11563_11564_11565_11566_11567_11568_11569_11570_11571_11572_11573_11574_11575_11576_11577_11578_11579_11580_11581_11582_11583_11584_11585_11586_11587_11588_11589_11590_11591_11592_11593_11594_11595_11596_11597_11598_11599_11600_11601_11602_11603_11604_11605_11606_11607_11608_11609_11610_11611_11612_11613_11614_11615_11616_11617_11618_11619_11620_11621_11622_11623_11624_11625_11626_11627_11628_11629_11630_11631_11632_11633_11634_11635_11636_11637_11638_11639_11640_11641_11642_11643_11644_11645_11646_11647_11648_11649_11650_11651_11652_11653_11654_11655_11656_11657_11658_11659_11660_11661_11662_11663_11664_11665_11666_11667_11668_11669_11670_11671_11672_11673_11674_11675_11676_11677_11678_11679_11680_11681_11682_11683_11684_11685_11686_11687_11688_11689_11690_11691_11692_11693_11694_11695_11696_11697_11698_11699_11700_11701_11702_11703_11704_11705_11706_11707_11708_11709_11710_11711_11712_11713_11714_11715_11716_11717_11718_11719_11720_11721_11722_11723_11724_11725_11726_11727_11728_11729_11730_11731_11732_11733_11734_11735_11736_11737_11738_11739_11740_11741_11742_11743_11744_11745_11746_11747_11748_11749_11750_11751_11752_11753_11754_11755_11756_11757_11758_11759_11760_11761_11762_11763_11764_11765_11766_11767_11768_11769_11770_11771_11772_11773_11774_11775_11776_11777_11778_11779_11780_11781_11782_11783_11784_11785_11786_11787_11788_11789_11790_11791_11792_11793_11794_11795_11796_11797_11798_11799_11800_11801_11802_11803_11804_11805_11806_11807_11808_11809_11810_11811_11812_11813_11814_11815_11816_11817_11818_11819_11820_11821_11822_11823_11824_11825_11826_11827_11828_11829_11830_11831_11832_11833_11834_11835_11836_11837_11838_11839_11840_11841_11842_11843_11844_11845_11846_11847_11848_11849_11850_11851_11852_11853_11854_11855_11856_11857_11858_11859_11860_11861_11862_11863_11864_11865_11866_11867_11868_11869_11870_11871_11872_11873_11874_11875_11876_11877_11878_11879_11880_11881_11882_11883_11884_11885_11886_11887_11888_11889_11890_11891_11892_11893_11894_11895_11896_11897_11898_11899_11900_11901_11902_11903_11904_11905_11906_11907_11908_11909_11910_11911_11912_11913_11914_11915_11916_11917_11918_11919_11920_11921_11922_11923_11924_11925_11926_11927_11928_11929_11930_11931_11932_11933_11934_11935_11936_11937_11938_11939_11940_11941_11942_11943_11944_11945_11946_11947_11948_11949_11950_11951_11952_11953_11954_11955_11956_11957_11958_11959_11960_11961_11962_11963_11964_11965_11966_11967_11968_11969_11970_11971_11972_11973_11974_11975_11976_11977_11978_11979_11980_11981_11982_11983_11984_11985_11986_11987_11988_11989_11990_11991_11992_11993_11994_11995_11996_11997_11998_11999_12000_12001_12002_12003_12004_12005_12006_12007_12008_12009_12010_12011_12012_12013_12014_12015_12016_12017_12018_12019_12020_12021_12022_12023_12024_12025_12026_12027_12028_12029_12030_12031_12032_12033_12034_12035_12036_12037_12038_12039_12040_12041_12042_12043_12044_12045_12046_12047_12048_12049_12050_12051_12052_12053_12054_12055_12056_12057_12058_12059_12060_12061_12062_12063_12064_12065_12066_12067_12068_12069_12070_12071_12072_12073_12074_12075_12076_12077_12078_12079_12080_12081_12082_12083_12084_12085_12086_12087_12088_12089_12090_12091_12092_12093_12094_12095_12096_12097_12098_12099_12100_12101_12102_12103_12104_12105_12106_12107_12108_12109_12110_12111_12112_12113_12114_12115_12116_12117_12118_12119_12120_12121_12122_12123_12124_12125_12126_12127_12128_12129_12130_12131_12132_12133_12134_12135_12136_12137_12138_12139_12140_12141_12142_12143_12144_12145_12146_12147_12148_12149_12150_12151_12152_12153_12154_12155_12156_12157_12158_12159_12160_12161_12162_12163_12164_12165_12166_12167_12168_12169_12170_12171_12172_12173_12174_12175_12176_12177_12178_12179_12180_12181_12182_12183_12184_12185_12186_12187_12188_12189_12190_12191_12192_12193_12194_12195_12196_12197_12198_12199_12200_12201_12202_12203_12204_12205_12206_12207_12208_12209_12210_12211_12212_12213_12214_12215_12216_12217_12218_12219_12220_12221_12222_12223_12224_12225_12226_12227_12228_12229_12230_12231_12232_12233_12234_12235_12236_12237_12238_12239_12240_12241_12242_12243_12244_12245_12246_12247_12248_12249_12250_12251_12252_12253_12254_12255_12256_12257_12258_12259_12260_12261_12262_12263_12264_12265_12266_12267_12268_12269_12270_12271_12272_12273_12274_12275_12276_12277_12278_12279_12280_12281_12282_12283_12284_12285_12286_12287_12288_12289_12290_12291_12292_12293_12294_12295_12296_12297_12298_12299_12300_12301_12302_12303_12304_12305_12306_12307_12308_12309_12310_12311_12312_12313_12314_12315_12316_12317_12318_12319_12320_12321_12322_12323_12324_12325_12326_12327_12328_12329_12330_12331_12332_12333_12334_12335_12336_12337_12338_12339_12340_12341_12342_12343_12344_12345_12346_12347_12348_12349_12350_12351_12352_12353_12354_12355_12356_12357_12358_12359_12360_12361_12362_12363_12364_12365_12366_12367_12368_12369_12370_12371_12372_12373_12374_12375_12376_12377_12378_12379_12380_12381_12382_12383_12384_12385_12386_12387_12388_12389_12390_12391_12392_12393_12394_12395_12396_12397_12398_12399_12400_12401_12402_12403_12404_12405_12406_12407_12408_12409_12410_12411_12412_12413_12414_12415_12416_12417_12418_12419_12420_12421_12422_12423_12424_12425_12426_12427_12428_12429_12430_12431_12432_12433_12434_12435_12436_12437_12438_12439_12440_12441_12442_12443_12444_12445_12446_12447_12448_12449_12450_12451_12452_12453_12454_12455_12456_12457_12458_12459_12460_12461_12462_12463_12464_12465_12466_12467_12468_12469_12470_12471_12472_12473_12474_12475_12476_12477_12478_12479_12480_12481_12482_12483_12484_12485_12486_12487_12488_12489_12490_12491_12492_12493_12494_12495_12496_12497_12498_12499_12500_12501_12502_12503_12504_12505_12506_12507_12508_12509_12510_12511_12512_12513_12514_12515_12516_12517_12518_12519_12520_12521_12522_12523_12524_12525_12526_12527_12528_12529_12530_12531_12532_12533_12534_12535_12536_12537_12538_12539_12540_12541_12542_12543_12544_12545_12546_12547_12548_12549_12550_12551_12552_12553_12554_12555_12556_12557_12558_12559_12560_12561_12562_12563_12564_12565_12566_12567_12568_12569_12570_12571_12572_12573_12574_12575_12576_12577_12578_12579_12580_12581_12582_12583_12584_12585_12586_12587_12588_12589_12590_12591_12592_12593_12594_12595_12596_12597_12598_12599_12600_12601_12602_12603_12604_12605_12606_12607_12608_12609_12610_12611_12612_12613_12614_12615_12616_12617_12618_12619_12620_12621_12622_12623_12624_12625_12626_12627_12628_12629_12630_12631_12632_12633_12634_12635_12636_12637_12638_12639_12640_12641_12642_12643_12644_12645_12646_12647_12648_12649_12650_12651_12652_12653_12654_12655_12656_12657_12658_12659_12660_12661_12662_12663_12664_12665_12666_12667_12668_12669_12670_12671_12672_12673_12674_12675_12676_12677_12678_12679_12680_12681_12682_12683_12684_12685_12686_12687_12688_12689_12690_12691_12692_12693_12694_12695_12696_12697_12698_12699_12700_12701_12702_12703_12704_12705_12706_12707_12708_12709_12710_12711_12712_12713_12714_12715_12716_12717_12718_12719_12720_12721_12722_12723_12724_12725_12726_12727_12728_12729_12730_12731_12732_12733_12734_12735_12736_12737_12738_12739_12740_12741_12742_12743_12744_12745_12746_12747_12748_12749_12750_12751_12752_12753_12754_12755_12756_12757_12758_12759_12760_12761_12762_12763_12764_12765_12766_12767_12768_12769_12770_12771_12772_12773_12774_12775_12776_12777_12778_12779_12780_12781_12782_12783_12784_12785_12786_12787_12788_12789_12790_12791_12792_12793_12794_12795_12796_12797_12798_12799_12800_12801_12802_12803_12804_12805_12806_12807_12808_12809_12810_12811_12812_12813_12814_12815_12816_12817_12818_12819_12820_12821_12822_12823_12824_12825_12826_12827_12828_12829_12830_12831_12832_12833_12834_12835_12836_12837_12838_12839_12840_12841_12842_12843_12844_12845_12846_12847_12848_12849_12850_12851_12852_12853_12854_12855_12856_12857_12858_12859_12860_12861_12862_12863_12864_12865_12866_12867_12868_12869_12870_12871_12872_12873_12874_12875_12876_12877_12878_12879_12880_12881_12882_12883_12884_12885_12886_12887_12888_12889_12890_12891_12892_12893_12894_12895_12896_12897_12898_12899_12900_12901_12902_12903_12904_12905_12906_12907_12908_12909_12910_12911_12912_12913_12914_12915_12916_12917_12918_12919_12920_12921_12922_12923_12924_12925_12926_12927_12928_12929_12930_12931_12932_12933_12934_12935_12936_12937_12938_12939_12940_12941_12942_12943_12944_12945_12946_12947_12948_12949_12950_12951_12952_12953_12954_12955_12956_12957_12958_12959_12960_12961_12962_12963_12964_12965_12966_12967_12968_12969_12970_12971_12972_12973_12974_12975_12976_12977_12978_12979_12980_12981_12982_12983_12984_12985_12986_12987_12988_12989_12990_12991_12992_12993_12994_12995_12996_12997_12998_12999_13000_13001_13002_13003_13004_13005_13006_13007_13008_13009_13010_13011_13012_13013_13014_13015_13016_13017_13018_13019_13020_13021_13022_13023_13024_13025_13026_13027_13028_13029_13030_13031_13032_13033_13034_13035_13036_13037_13038_13039_13040_13041_13042_13043_13044_13045_13046_13047_13048_13049_13050_13051_13052_13053_13054_13055_13056_13057_13058_13059_13060_13061_13062_13063_13064_13065_13066_13067_13068_13069_13070_13071_13072_13073_13074_13075_13076_13077_13078_13079_13080_13081_13082_13083_13084_13085_13086_13087_13088_13089_13090_13091_13092_13093_13094_13095_13096_13097_13098_13099_13100_13101_13102_13103_13104_13105_13106_13107_13108_13109_13110_13111_13112_13113_13114_13115_13116_13117_13118_13119_13120_13121_13122_13123_13124_13125_13126_13127_13128_13129_13130_13131_13132_13133_13134_13135_13136_13137_13138_13139_13140_13141_13142_13143_13144_13145_13146_13147_13148_13149_13150_13151_13152_13153_13154_13155_13156_13157_13158_13159_13160_13161_13162_13163_13164_13165_13166_13167_13168_13169_13170_13171_13172_13173_13174_13175_13176_13177_13178_13179_13180_13181_13182_13183_13184_13185_13186_13187_13188_13189_13190_13191_13192_13193_13194_13195_13196_13197_13198_13199_13200_13201_13202_13203_13204_13205_13206_13207_13208_13209_13210_13211_13212_13213_13214_13215_13216_13217_13218_13219_13220_13221_13222_13223_13224_13225_13226_13227_13228_13229_13230_13231_13232_13233_13234_13235_13236_13237_13238_13239_13240_13241_13242_13243_13244_13245_13246_13247_13248_13249_13250_13251_13252_13253_13254_13255_13256_13257_13258_13259_13260_13261_13262_13263_13264_13265_13266_13267_13268_13269_13270_13271_13272_13273_13274_13275_13276_13277_13278_13279_13280_13281_13282_13283_13284_13285_13286_13287_13288_13289_13290_13291_13292_13293_13294_13295_13296_13297_13298_13299_13300_13301_13302_13303_13304_13305_13306_13307_13308_13309_13310_13311_13312_13313_13314_13315_13316_13317_13318_13319_13320_13321_13322_13323_13324_13325_13326_13327_13328_13329_13330_13331_13332_13333_13334_13335_13336_13337_13338_13339_13340_13341_13342_13343_13344_13345_13346_13347_13348_13349_13350_13351_13352_13353_13354_13355_13356_13357_13358_13359_13360_13361_13362_13363_13364_13365_13366_13367_13368_13369_13370_13371_13372_13373_13374_13375_13376_13377_13378_13379_13380_13381_13382_13383_13384_13385_13386_13387_13388_13389_13390_13391_13392_13393_13394_13395_13396_13397_13398_13399_13400_13401_13402_13403_13404_13405_13406_13407_13408_13409_13410_13411_13412_13413_13414_13415_13416_13417_13418_13419_13420_13421_13422_13423_13424_13425_13426_13427_13428_13429_13430_13431_13432_13433_13434_13435_13436_13437_13438_13439_13440_13441_13442_13443_13444_13445_13446_13447_13448_13449_13450_13451_13452_13453_13454_13455_13456_13457_13458_13459_13460_13461_13462_13463_13464_13465_13466_13467_13468_13469_13470_13471_13472_13473_13474_13475_13476_13477_13478_13479_13480_13481_13482_13483_13484_13485_13486_13487_13488_13489_13490_13491_13492_13493_13494_13495_13496_13497_13498_13499_13500_13501_13502_13503_13504_13505_13506_13507_13508_13509_13510_13511_13512_13513_13514_13515_13516_13517_13518_13519_13520_13521_13522_13523_13524_13525_13526_13527_13528_13529_13530_13531_13532_13533_13534_13535_13536_13537_13538_13539_13540_13541_13542_13543_13544_13545_13546_13547_13548_13549_13550_13551_13552_13553_13554_13555_13556_13557_13558_13559_13560_13561_13562_13563_13564_13565_13566_13567_13568_13569_13570_13571_13572_13573_13574_13575_13576_13577_13578_13579_13580_13581_13582_13583_13584_13585_13586_13587_13588_13589_13590_13591_13592_13593_13594_13595_13596_13597_13598_13599_13600_13601_13602_13603_13604_13605_13606_13607_13608_13609_13610_13611_13612_13613_13614_13615_13616_13617_13618_13619_13620_13621_13622_13623_13624_13625_13626_13627_13628_13629_13630_13631_13632_13633_13634_13635_13636_13637_13638_13639_13640_13641_13642_13643_13644_13645_13646_13647_13648_13649_13650_13651_13652_13653_13654_13655_13656_13657_13658_13659_13660_13661_13662_13663_13664_13665_13666_13667_13668_13669_13670_13671_13672_13673_13674_13675_13676_13677_13678_13679_13680_13681_13682_13683_13684_13685_13686_13687_13688_13689_13690_13691_13692_13693_13694_13695_13696_13697_13698_13699_13700_13701_13702_13703_13704_13705_13706_13707_13708_13709_13710_13711_13712_13713_13714_13715_13716_13717_13718_13719_13720_13721_13722_13723_13724_13725_13726_13727_13728_13729_13730_13731_13732_13733_13734_13735_13736_13737_13738_13739_13740_13741_13742_13743_13744_13745_13746_13747_13748_13749_13750_13751_13752_13753_13754_13755_13756_13757_13758_13759_13760_13761_13762_13763_13764_13765_13766_13767_13768_13769_13770_13771_13772_13773_13774_13775_13776_13777_13778_13779_13780_13781_13782_13783_13784_13785_13786_13787_13788_13789_13790_13791_13792_13793_13794_13795_13796_13797_13798_13799_13800_13801_13802_13803_13804_13805_13806_13807_13808_13809_13810_13811_13812_13813_13814_13815_13816_13817_13818_13819_13820_13821_13822_13823_13824_13825_13826_13827_13828_13829_13830_13831_13832_13833_13834_13835_13836_13837_13838_13839_13840_13841_13842_13843_13844_13845_13846_13847_13848_13849_13850_13851_13852_13853_13854_13855_13856_13857_13858_13859_13860_13861_13862_13863_13864_13865_13866_13867_13868_13869_13870_13871_13872_13873_13874_13875_13876_13877_13878_13879_13880_13881_13882_13883_13884_13885_13886_13887_13888_13889_13890_13891_13892_13893_13894_13895_13896_13897_13898_13899_13900_13901_13902_13903_13904_13905_13906_13907_13908_13909_13910_13911_13912_13913_13914_13915_13916_13917_13918_13919_13920_13921_13922_13923_13924_13925_13926_13927_13928_13929_13930_13931_13932_13933_13934_13935_13936_13937_13938_13939_13940_13941_13942_13943_13944_13945_13946_13947_13948_13949_13950_13951_13952_13953_13954_13955_13956_13957_13958_13959_13960_13961_13962_13963_13964_13965_13966_13967_13968_13969_13970_13971_13972_13973_13974_13975_13976_13977_13978_13979_13980_13981_13982_13983_13984_13985_13986_13987_13988_13989_13990_13991_13992_13993_13994_13995_13996_13997_13998_13999_14000_14001_14002_14003_14004_14005_14006_14007_14008_14009_14010_14011_14012_14013_14014_14015_14016_14017_14018_14019_14020_14021_14022_14023_14024_14025_14026_14027_14028_14029_14030_14031_14032_14033_14034_14035_14036_14037_14038_14039_14040_14041_14042_14043_14044_14045_14046_14047_14048_14049_14050_14051_14052_14053_14054_14055_14056_14057_14058_14059_14060_14061_14062_14063_14064_14065_14066_14067_14068_14069_14070_14071_14072_14073_14074_14075_14076_14077_14078_14079_14080_14081_14082_14083_14084_14085_14086_14087_14088_14089_14090_14091_14092_14093_14094_14095_14096_14097_14098_14099_14100_14101_14102_14103_14104_14105_14106_14107_14108_14109_14110_14111_14112_14113_14114_14115_14116_14117_14118_14119_14120_14121_14122_14123_14124_14125_14126_14127_14128_14129_14130_14131_14132_14133_14134_14135_14136_14137_14138_14139_14140_14141_14142_14143_14144_14145_14146_14147_14148_14149_14150_14151_14152_14153_14154_14155_14156_14157_14158_14159_14160_14161_14162_14163_14164_14165_14166_14167_14168_14169_14170_14171_14172_14173_14174_14175_14176_14177_14178_14179_14180_14181_14182_14183_14184_14185_14186_14187_14188_14189_14190_14191_14192_14193_14194_14195_14196_14197_14198_14199_14200_14201_14202_14203_14204_14205_14206_14207_14208_14209_14210_14211_14212_14213_14214_14215_14216_14217_14218_14219_14220_14221_14222_14223_14224_14225_14226_14227_14228_14229_14230_14231_14232_14233_14234_14235_14236_14237_14238_14239_14240_14241_14242_14243_14244_14245_14246_14247_14248_14249_14250_14251_14252_14253_14254_14255_14256_14257_14258_14259_14260_14261_14262_14263_14264_14265_14266_14267_14268_14269_14270_14271_14272_14273_14274_14275_14276_14277_14278_14279_14280_14281_14282_14283_14284_14285_14286_14287_14288_14289_14290_14291_14292_14293_14294_14295_14296_14297_14298_14299_14300_14301_14302_14303_14304_14305_14306_14307_14308_14309_14310_14311_14312_14313_14314_14315_14316_14317_14318_14319_14320_14321_14322_14323_14324_14325_14326_14327_14328_14329_14330_14331_14332_14333_14334_14335_14336_14337_14338_14339_14340_14341_14342_14343_14344_14345_14346_14347_14348_14349_14350_14351_14352_14353_14354_14355_14356_14357_14358_14359_14360_14361_14362_14363_14364_14365_14366_14367_14368_14369_14370_14371_14372_14373_14374_14375_14376_14377_14378_14379_14380_14381_14382_14383_14384_14385_14386_14387_14388_14389_14390_14391_14392_14393_14394_14395_14396_14397_14398_14399_14400_14401_14402_14403_14404_14405_14406_14407_14408_14409_14410_14411_14412_14413_14414_14415_14416_14417_14418_14419_14420_14421_14422_14423_14424_14425_14426_14427_14428_14429_14430_14431_14432_14433_14434_14435_14436_14437_14438_14439_14440_14441_14442_14443_14444_14445_14446_14447_14448_14449_14450_14451_14452_14453_14454_14455_14456_14457_14458_14459_14460_14461_14462_14463_14464_14465_14466_14467_14468_14469_14470_14471_14472_14473_14474_14475_14476_14477_14478_14479_14480_14481_14482_14483_14484_14485_14486_14487_14488_14489_14490_14491_14492_14493_14494_14495_14496_14497_14498_14499_14500_14501_14502_14503_14504_14505_14506_14507_14508_14509_14510_14511_14512_14513_14514_14515_14516_14517_14518_14519_14520_14521_14522_14523_14524_14525_14526_14527_14528_14529_14530_14531_14532_14533_14534_14535_14536_14537_14538_14539_14540_14541_14542_14543_14544_14545_14546_14547_14548_14549_14550_14551_14552_14553_14554_14555_14556_14557_14558_14559_14560_14561_14562_14563_14564_14565_14566_14567_14568_14569_14570_14571_14572_14573_14574_14575_14576_14577_14578_14579_14580_14581_14582_14583_14584_14585_14586_14587_14588_14589_14590_14591_14592_14593_14594_14595_14596_14597_14598_14599_14600_14601_14602_14603_14604_14605_14606_14607_14608_14609_14610_14611_14612_14613_14614_14615_14616_14617_14618_14619_14620_14621_14622_14623_14624_14625_14626_14627_14628_14629_14630_14631_14632_14633_14634_14635_14636_14637_14638_14639_14640_14641_14642_14643_14644_14645_14646_14647_14648_14649_14650_14651_14652_14653_14654_14655_14656_14657_14658_14659_14660_14661_14662_14663_14664_14665_14666_14667_14668_14669_14670_14671_14672_14673_14674_14675_14676_14677_14678_14679_14680_14681_14682_14683_14684_14685_14686_14687_14688_14689_14690_14691_14692_14693_14694_14695_14696_14697_14698_14699_14700_14701_14702_14703_14704_14705_14706_14707_14708_14709_14710_14711_14712_14713_14714_14715_14716_14717_14718_14719_14720_14721_14722_14723_14724_14725_14726_14727_14728_14729_14730_14731_14732_14733_14734_14735_14736_14737_14738_14739_14740_14741_14742_14743_14744_14745_14746_14747_14748_14749_14750_14751_14752_14753_14754_14755_14756_14757_14758_14759_14760_14761_14762_14763_14764_14765_14766_14767_14768_14769_14770_14771_14772_14773_14774_14775_14776_14777_14778_14779_14780_14781_14782_14783_14784_14785_14786_14787_14788_14789_14790_14791_14792_14793_14794_14795_14796_14797_14798_14799_14800_14801_14802_14803_14804_14805_14806_14807_14808_14809_14810_14811_14812_14813_14814_14815_14816_14817_14818_14819_14820_14821_14822_14823_14824_14825_14826_14827_14828_14829_14830_14831_14832_14833_14834_14835_14836_14837_14838_14839_14840_14841_14842_14843_14844_14845_14846_14847_14848_14849_14850_14851_14852_14853_14854_14855_14856_14857_14858_14859_14860_14861_14862_14863_14864_14865_14866_14867_14868_14869_14870_14871_14872_14873_14874_14875_14876_14877_14878_14879_14880_14881_14882_14883_14884_14885_14886_14887_14888_14889_14890_14891_14892_14893_14894_14895_14896_14897_14898_14899_14900_14901_14902_14903_14904_14905_14906_14907_14908_14909_14910_14911_14912_14913_14914_14915_14916_14917_14918_14919_14920_14921_14922_14923_14924_14925_14926_14927_14928_14929_14930_14931_14932_14933_14934_14935_14936_14937_14938_14939_14940_14941_14942_14943_14944_14945_14946_14947_14948_14949_14950_14951_14952_14953_14954_14955_14956_14957_14958_14959_14960_14961_14962_14963_14964_14965_14966_14967_14968_14969_14970_14971_14972_14973_14974_14975_14976_14977_14978_14979_14980_14981_14982_14983_14984_14985_14986_14987_14988_14989_14990_14991_14992_14993_14994_14995_14996_14997_14998_14999_15000_15001_15002_15003_15004_15005_15006_15007_15008_15009_15010_15011_15012_15013_15014_15015_15016_15017_15018_15019_15020_15021_15022_15023_15024_15025_15026_15027_15028_15029_15030_15031_15032_15033_15034_15035_15036_15037_15038_15039_15040_15041_15042_15043_15044_15045_15046_15047_15048_15049_15050_15051_15052_15053_15054_15055_15056_15057_15058_15059_15060_15061_15062_15063_15064_15065_15066_15067_15068_15069_15070_15071_15072_15073_15074_15075_15076_15077_15078_15079_15080_15081_15082_15083_15084_15085_15086_15087_15088_15089_15090_15091_15092_15093_15094_15095_15096_15097_15098_15099_15100_15101_15102_15103_15104_15105_15106_15107_15108_15109_15110_15111_15112_15113_15114_15115_15116_15117_15118_15119_15120_15121_15122_15123_15124_15125_15126_15127_15128_15129_15130_15131_15132_15133_15134_15135_15136_15137_15138_15139_15140_15141_15142_15143_15144_15145_15146_15147_15148_15149_15150_15151_15152_15153_15154_15155_15156_15157_15158_15159_15160_15161_15162_15163_15164_15165_15166_15167_15168_15169_15170_15171_15172_15173_15174_15175_15176_15177_15178_15179_15180_15181_15182_15183_15184_15185_15186_15187_15188_15189_15190_15191_15192_15193_15194_15195_15196_15197_15198_15199_15200_15201_15202_15203_15204_15205_15206_15207_15208_15209_15210_15211_15212_15213_15214_15215_15216_15217_15218_15219_15220_15221_15222_15223_15224_15225_15226_15227_15228_15229_15230_15231_15232_15233_15234_15235_15236_15237_15238_15239_15240_15241_15242_15243_15244_15245_15246_15247_15248_15249_15250_15251_15252_15253_15254_15255_15256_15257_15258_15259_15260_15261_15262_15263_15264_15265_15266_15267_15268_15269_15270_15271_15272_15273_15274_15275_15276_15277_15278_15279_15280_15281_15282_15283_15284_15285_15286_15287_15288_15289_15290_15291_15292_15293_15294_15295_15296_15297_15298_15299_15300_15301_15302_15303_15304_15305_15306_15307_15308_15309_15310_15311_15312_15313_15314_15315_15316_15317_15318_15319_15320_15321_15322_15323_15324_15325_15326_15327_15328_15329_15330_15331_15332_15333_15334_15335_15336_15337_15338_15339_15340_15341_15342_15343_15344_15345_15346_15347_15348_15349_15350_15351_15352_15353_15354_15355_15356_15357_15358_15359_15360_15361_15362_15363_15364_15365_15366_15367_15368_15369_15370_15371_15372_15373_15374_15375_15376_15377_15378_15379_15380_15381_15382_15383_15384_15385_15386_15387_15388_15389_15390_15391_15392_15393_15394_15395_15396_15397_15398_15399_15400_15401_15402_15403_15404_15405_15406_15407_15408_15409_15410_15411_15412_15413_15414_15415_15416_15417_15418_15419_15420_15421_15422_15423_15424_15425_15426_15427_15428_15429_15430_15431_15432_15433_15434_15435_15436_15437_15438_15439_15440_15441_15442_15443_15444_15445_15446_15447_15448_15449_15450_15451_15452_15453_15454_15455_15456_15457_15458_15459_15460_15461_15462_15463_15464_15465_15466_15467_15468_15469_15470_15471_15472_15473_15474_15475_15476_15477_15478_15479_15480_15481_15482_15483_15484_15485_15486_15487_15488_15489_15490_15491_15492_15493_15494_15495_15496_15497_15498_15499_15500_15501_15502_15503_15504_15505_15506_15507_15508_15509_15510_15511_15512_15513_15514_15515_15516_15517_15518_15519_15520_15521_15522_15523_15524_15525_15526_15527_15528_15529_15530_15531_15532_15533_15534_15535_15536_15537_15538_15539_15540_15541_15542_15543_15544_15545_15546_15547_15548_15549_15550_15551_15552_15553_15554_15555_15556_15557_15558_15559_15560_15561_15562_15563_15564_15565_15566_15567_15568_15569_15570_15571_15572_15573_15574_15575_15576_15577_15578_15579_15580_15581_15582_15583_15584_15585_15586_15587_15588_15589_15590_15591_15592_15593_15594_15595_15596_15597_15598_15599_15600_15601_15602_15603_15604_15605_15606_15607_15608_15609_15610_15611_15612_15613_15614_15615_15616_15617_15618_15619_15620_15621_15622_15623_15624_15625_15626_15627_15628_15629_15630_15631_15632_15633_15634_15635_15636_15637_15638_15639_15640_15641_15642_15643_15644_15645_15646_15647_15648_15649_15650_15651_15652_15653_15654_15655_15656_15657_15658_15659_15660_15661_15662_15663_15664_15665_15666_15667_15668_15669_15670_15671_15672_15673_15674_15675_15676_15677_15678_15679_15680_15681_15682_15683_15684_15685_15686_15687_15688_15689_15690_15691_15692_15693_15694_15695_15696_15697_15698_15699_15700_15701_15702_15703_15704_15705_15706_15707_15708_15709_15710_15711_15712_15713_15714_15715_15716_15717_15718_15719_15720_15721_15722_15723_15724_15725_15726_15727_15728_15729_15730_15731_15732_15733_15734_15735_15736_15737_15738_15739_15740_15741_15742_15743_15744_15745_15746_15747_15748_15749_15750_15751_15752_15753_15754_15755_15756_15757_15758_15759_15760_15761_15762_15763_15764_15765_15766_15767_15768_15769_15770_15771_15772_15773_15774_15775_15776_15777_15778_15779_15780_15781_15782_15783_15784_15785_15786_15787_15788_15789_15790_15791_15792_15793_15794_15795_15796_15797_15798_15799_15800_15801_15802_15803_15804_15805_15806_15807_15808_15809_15810_15811_15812_15813_15814_15815_15816_15817_15818_15819_15820_15821_15822_15823_15824_15825_15826_15827_15828_15829_15830_15831_15832_15833_15834_15835_15836_15837_15838_15839_15840_15841_15842_15843_15844_15845_15846_15847_15848_15849_15850_15851_15852_15853_15854_15855_15856_15857_15858_15859_15860_15861_15862_15863_15864_15865_15866_15867_15868_15869_15870_15871_15872_15873_15874_15875_15876_15877_15878_15879_15880_15881_15882_15883_15884_15885_15886_15887_15888_15889_15890_15891_15892_15893_15894_15895_15896_15897_15898_15899_15900_15901_15902_15903_15904_15905_15906_15907_15908_15909_15910_15911_15912_15913_15914_15915_15916_15917_15918_15919_15920_15921_15922_15923_15924_15925_15926_15927_15928_15929_15930_15931_15932_15933_15934_15935_15936_15937_15938_15939_15940_15941_15942_15943_15944_15945_15946_15947_15948_15949_15950_15951_15952_15953_15954_15955_15956_15957_15958_15959_15960_15961_15962_15963_15964_15965_15966_15967_15968_15969_15970_15971_15972_15973_15974_15975_15976_15977_15978_15979_15980_15981_15982_15983_15984_15985_15986_15987_15988_15989_15990_15991_15992_15993_15994_15995_15996_15997_15998_15999_16000_16001_16002_16003_16004_16005_16006_16007_16008_16009_16010_16011_16012_16013_16014_16015_16016_16017_16018_16019_16020_16021_16022_16023_16024_16025_16026_16027_16028_16029_16030_16031_16032_16033_16034_16035_16036_16037_16038_16039_16040_16041_16042_16043_16044_16045_16046_16047_16048_16049_16050_16051_16052_16053_16054_16055_16056_16057_16058_16059_16060_16061_16062_16063_16064_16065_16066_16067_16068_16069_16070_16071_16072_16073_16074_16075_16076_16077_16078_16079_16080_16081_16082_16083_16084_16085_16086_16087_16088_16089_16090_16091_16092_16093_16094_16095_16096_16097_16098_16099_16100_16101_16102_16103_16104_16105_16106_16107_16108_16109_16110_16111_16112_16113_16114_16115_16116_16117_16118_16119_16120_16121_16122_16123_16124_16125_16126_16127_16128_16129_16130_16131_16132_16133_16134_16135_16136_16137_16138_16139_16140_16141_16142_16143_16144_16145_16146_16147_16148_16149_16150_16151_16152_16153_16154_16155_16156_16157_16158_16159_16160_16161_16162_16163_16164_16165_16166_16167_16168_16169_16170_16171_16172_16173_16174_16175_16176_16177_16178_16179_16180_16181_16182_16183_16184_16185_16186_16187_16188_16189_16190_16191_16192_16193_16194_16195_16196_16197_16198_16199_16200_16201_16202_16203_16204_16205_16206_16207_16208_16209_16210_16211_16212_16213_16214_16215_16216_16217_16218_16219_16220_16221_16222_16223_16224_16225_16226_16227_16228_16229_16230_16231_16232_16233_16234_16235_16236_16237_16238_16239_16240_16241_16242_16243_16244_16245_16246_16247_16248_16249_16250_16251_16252_16253_16254_16255_16256_16257_16258_16259_16260_16261_16262_16263_16264_16265_16266_16267_16268_16269_16270_16271_16272_16273_16274_16275_16276_16277_16278_16279_16280_16281_16282_16283_16284_16285_16286_16287_16288_16289_16290_16291_16292_16293_16294_16295_16296_16297_16298_16299_16300_16301_16302_16303_16304_16305_16306_16307_16308_16309_16310_16311_16312_16313_16314_16315_16316_16317_16318_16319_16320_16321_16322_16323_16324_16325_16326_16327_16328_16329_16330_16331_16332_16333_16334_16335_16336_16337_16338_16339_16340_16341_16342_16343_16344_16345_16346_16347_16348_16349_16350_16351_16352_16353_16354_16355_16356_16357_16358_16359_16360_16361_16362_16363_16364_16365_16366_16367_16368_16369_16370_16371_16372_16373_16374_16375_16376_16377_16378_16379_16380_16381_16382_16383_16384_16385_16386_16387_16388_16389_16390_16391_16392_16393_16394_16395_16396_16397_16398_16399_16400_16401_16402_16403_16404_16405_16406_16407_16408_16409_16410_16411_16412_16413_16414_16415_16416_16417_16418_16419_16420_16421_16422_16423_16424_16425_16426_16427_16428_16429_16430_16431_16432_16433_16434_16435_16436_16437_16438_16439_16440_16441_16442_16443_16444_16445_16446_16447_16448_16449_16450_16451_16452_16453_16454_16455_16456_16457_16458_16459_16460_16461_16462_16463_16464_16465_16466_16467_16468_16469_16470_16471_16472_16473_16474_16475_16476_16477_16478_16479_16480_16481_16482_16483_16484_16485_16486_16487_16488_16489_16490_16491_16492_16493_16494_16495_16496_16497_16498_16499_16500_16501_16502_16503_16504_16505_16506_16507_16508_16509_16510_16511_16512_16513_16514_16515_16516_16517_16518_16519_16520_16521_16522_16523_16524_16525_16526_16527_16528_16529_16530_16531_16532_16533_16534_16535_16536_16537_16538_16539_16540_16541_16542_16543_16544_16545_16546_16547_16548_16549_16550_16551_16552_16553_16554_16555_16556_16557_16558_16559_16560_16561_16562_16563_16564_16565_16566_16567_16568_16569_16570_16571_16572_16573_16574_16575_16576_16577_16578_16579_16580_16581_16582_16583_16584_16585_16586_16587_16588_16589_16590_16591_16592_16593_16594_16595_16596_16597_16598_16599_16600_16601_16602_16603_16604_16605_16606_16607_16608_16609_16610_16611_16612_16613_16614_16615_16616_16617_16618_16619_16620_16621_16622_16623_16624_16625_16626_16627_16628_16629_16630_16631_16632_16633_16634_16635_16636_16637_16638_16639_16640_16641_16642_16643_16644_16645_16646_16647_16648_16649_16650_16651_16652_16653_16654_16655_16656_16657_16658_16659_16660_16661_16662_16663_16664_16665_16666_16667_16668_16669_16670_16671_16672_16673_16674_16675_16676_16677_16678_16679_16680_16681_16682_16683_16684_16685_16686_16687_16688_16689_16690_16691_16692_16693_16694_16695_16696_16697_16698_16699_16700_16701_16702_16703_16704_16705_16706_16707_16708_16709_16710_16711_16712_16713_16714_16715_16716_16717_16718_16719_16720_16721_16722_16723_16724_16725_16726_16727_16728_16729_16730_16731_16732_16733_16734_16735_16736_16737_16738_16739_16740_16741_16742_16743_16744_16745_16746_16747_16748_16749_16750_16751_16752_16753_16754_16755_16756_16757_16758_16759_16760_16761_16762_16763_16764_16765_16766_16767_16768_16769_16770_16771_16772_16773_16774_16775_16776_16777_16778_16779_16780_16781_16782_16783_16784_16785_16786_16787_16788_16789_16790_16791_16792_16793_16794_16795_16796_16797_16798_16799_16800_16801_16802_16803_16804_16805_16806_16807_16808_16809_16810_16811_16812_16813_16814_16815_16816_16817_16818_16819_16820_16821_16822_16823_16824_16825_16826_16827_16828_16829_16830_16831_16832_16833_16834_16835_16836_16837_16838_16839_16840_16841_16842_16843_16844_16845_16846_16847_16848_16849_16850_16851_16852_16853_16854_16855_16856_16857_16858_16859_16860_16861_16862_16863_16864_16865_16866_16867_16868_16869_16870_16871_16872_16873_16874_16875_16876_16877_16878_16879_16880_16881_16882_16883_16884_16885_16886_16887_16888_16889_16890_16891_16892_16893_16894_16895_16896_16897_16898_16899_16900_16901_16902_16903_16904_16905_16906_16907_16908_16909_16910_16911_16912_16913_16914_16915_16916_16917_16918_16919_16920_16921_16922_16923_16924_16925_16926_16927_16928_16929_16930_16931_16932_16933_16934_16935_16936_16937_16938_16939_16940_16941_16942_16943_16944_16945_16946_16947_16948_16949_16950_16951_16952_16953_16954_16955_16956_16957_16958_16959_16960_16961_16962_16963_16964_16965_16966_16967_16968_16969_16970_16971_16972_16973_16974_16975_16976_16977_16978_16979_16980_16981_16982_16983_16984_16985_16986_16987_16988_16989_16990_16991_16992_16993_16994_16995_16996_16997_16998_16999_17000_17001_17002_17003_17004_17005_17006_17007_17008_17009_17010_17011_17012_17013_17014_17015_17016_17017_17018_17019_17020_17021_17022_17023_17024_17025_17026_17027_17028_17029_17030_17031_17032_17033_17034_17035_17036_17037_17038_17039_17040_17041_17042_17043_17044_17045_17046_17047_17048_17049_17050_17051_17052_17053_17054_17055_17056_17057_17058_17059_17060_17061_17062_17063_17064_17065_17066_17067_17068_17069_17070_17071_17072_17073_17074_17075_17076_17077_17078_17079_17080_17081_17082_17083_17084_17085_17086_17087_17088_17089_17090_17091_17092_17093_17094_17095_17096_17097_17098_17099_17100_17101_17102_17103_17104_17105_17106_17107_17108_17109_17110_17111_17112_17113_17114_17115_17116_17117_17118_17119_17120_17121_17122_17123_17124_17125_17126_17127_17128_17129_17130_17131_17132_17133_17134_17135_17136_17137_17138_17139_17140_17141_17142_17143_17144_17145_17146_17147_17148_17149_17150_17151_17152_17153_17154_17155_17156_17157_17158_17159_17160_17161_17162_17163_17164_17165_17166_17167_17168_17169_17170_17171_17172_17173_17174_17175_17176_17177_17178_17179_17180_17181_17182_17183_17184_17185_17186_17187_17188_17189_17190_17191_17192_17193_17194_17195_17196_17197_17198_17199_17200_17201_17202_17203_17204_17205_17206_17207_17208_17209_17210_17211_17212_17213_17214_17215_17216_17217_17218_17219_17220_17221_17222_17223_17224_17225_17226_17227_17228_17229_17230_17231_17232_17233_17234_17235_17236_17237_17238_17239_17240_17241_17242_17243_17244_17245_17246_17247_17248_17249_17250_17251_17252_17253_17254_17255_17256_17257_17258_17259_17260_17261_17262_17263_17264_17265_17266_17267_17268_17269_17270_17271_17272_17273_17274_17275_17276_17277_17278_17279_17280_17281_17282_17283_17284_17285_17286_17287_17288_17289_17290_17291_17292_17293_17294_17295_17296_17297_17298_17299_17300_17301_17302_17303_17304_17305_17306_17307_17308_17309_17310_17311_17312_17313_17314_17315_17316_17317_17318_17319_17320_17321_17322_17323_17324_17325_17326_17327_17328_17329_17330_17331_17332_17333_17334_17335_17336_17337_17338_17339_17340_17341_17342_17343_17344_17345_17346_17347_17348_17349_17350_17351_17352_17353_17354_17355_17356_17357_17358_17359_17360_17361_17362_17363_17364_17365_17366_17367_17368_17369_17370_17371_17372_17373_17374_17375_17376_17377_17378_17379_17380_17381_17382_17383_17384_17385_17386_17387_17388_17389_17390_17391_17392_17393_17394_17395_17396_17397_17398_17399_17400_17401_17402_17403_17404_17405_17406_17407_17408_17409_17410_17411_17412_17413_17414_17415_17416_17417_17418_17419_17420_17421_17422_17423_17424_17425_17426_17427_17428_17429_17430_17431_17432_17433_17434_17435_17436_17437_17438_17439_17440_17441_17442_17443_17444_17445_17446_17447_17448_17449_17450_17451_17452_17453_17454_17455_17456_17457_17458_17459_17460_17461_17462_17463_17464_17465_17466_17467_17468_17469_17470_17471_17472_17473_17474_17475_17476_17477_17478_17479_17480_17481_17482_17483_17484_17485_17486_17487_17488_17489_17490_17491_17492_17493_17494_17495_17496_17497_17498_17499_17500_17501_17502_17503_17504_17505_17506_17507_17508_17509_17510_17511_17512_17513_17514_17515_17516_17517_17518_17519_17520_17521_17522_17523_17524_17525_17526_17527_17528_17529_17530_17531_17532_17533_17534_17535_17536_17537_17538_17539_17540_17541_17542_17543_17544_17545_17546_17547_17548_17549_17550_17551_17552_17553_17554_17555_17556_17557_17558_17559_17560_17561_17562_17563_17564_17565_17566_17567_17568_17569_17570_17571_17572_17573_17574_17575_17576_17577_17578_17579_17580_17581_17582_17583_17584_17585_17586_17587_17588_17589_17590_17591_17592_17593_17594_17595_17596_17597_17598_17599_17600_17601_17602_17603_17604_17605_17606_17607_17608_17609_17610_17611_17612_17613_17614_17615_17616_17617_17618_17619_17620_17621_17622_17623_17624_17625_17626_17627_17628_17629_17630_17631_17632_17633_17634_17635_17636_17637_17638_17639_17640_17641_17642_17643_17644_17645_17646_17647_17648_17649_17650_17651_17652_17653_17654_17655_17656_17657_17658_17659_17660_17661_17662_17663_17664_17665_17666_17667_17668_17669_17670_17671_17672_17673_17674_17675_17676_17677_17678_17679_17680_17681_17682_17683_17684_17685_17686_17687_17688_17689_17690_17691_17692_17693_17694_17695_17696_17697_17698_17699_17700_17701_17702_17703_17704_17705_17706_17707_17708_17709_17710_17711_17712_17713_17714_17715_17716_17717_17718_17719_17720_17721_17722_17723_17724_17725_17726_17727_17728_17729_17730_17731_17732_17733_17734_17735_17736_17737_17738_17739_17740_17741_17742_17743_17744_17745_17746_17747_17748_17749_17750_17751_17752_17753_17754_17755_17756_17757_17758_17759_17760_17761_17762_17763_17764_17765_17766_17767_17768_17769_17770_17771_17772_17773_17774_17775_17776_17777_17778_17779_17780_17781_17782_17783_17784_17785_17786_17787_17788_17789_17790_17791_17792_17793_17794_17795_17796_17797_17798_17799_17800_17801_17802_17803_17804_17805_17806_17807_17808_17809_17810_17811_17812_17813_17814_17815_17816_17817_17818_17819_17820_17821_17822_17823_17824_17825_17826_17827_17828_17829_17830_17831_17832_17833_17834_17835_17836_17837_17838_17839_17840_17841_17842_17843_17844_17845_17846_17847_17848_17849_17850_17851_17852_17853_17854_17855_17856_17857_17858_17859_17860_17861_17862_17863_17864_17865_17866_17867_17868_17869_17870_17871_17872_17873_17874_17875_17876_17877_17878_17879_17880_17881_17882_17883_17884_17885_17886_17887_17888_17889_17890_17891_17892_17893_17894_17895_17896_17897_17898_17899_17900_17901_17902_17903_17904_17905_17906_17907_17908_17909_17910_17911_17912_17913_17914_17915_17916_17917_17918_17919_17920_17921_17922_17923_17924_17925_17926_17927_17928_17929_17930_17931_17932_17933_17934_17935_17936_17937_17938_17939_17940_17941_17942_17943_17944_17945_17946_17947_17948_17949_17950_17951_17952_17953_17954_17955_17956_17957_17958_17959_17960_17961_17962_17963_17964_17965_17966_17967_17968_17969_17970_17971_17972_17973_17974_17975_17976_17977_17978_17979_17980_17981_17982_17983_17984_17985_17986_17987_17988_17989_17990_17991_17992_17993_17994_17995_17996_17997_17998_17999_18000_18001_18002_18003_18004_18005_18006_18007_18008_18009_18010_18011_18012_18013_18014_18015_18016_18017_18018_18019_18020_18021_18022_18023_18024_18025_18026_18027_18028_18029_18030_18031_18032_18033_18034_18035_18036_18037_18038_18039_18040_18041_18042_18043_18044_18045_18046_18047_18048_18049_18050_18051_18052_18053_18054_18055_18056_18057_18058_18059_18060_18061_18062_18063_18064_18065_18066_18067_18068_18069_18070_18071_18072_18073_18074_18075_18076_18077_18078_18079_18080_18081_18082_18083_18084_18085_18086_18087_18088_18089_18090_18091_18092_18093_18094_18095_18096_18097_18098_18099_18100_18101_18102_18103_18104_18105_18106_18107_18108_18109_18110_18111_18112_18113_18114_18115_18116_18117_18118_18119_18120_18121_18122_18123_18124_18125_18126_18127_18128_18129_18130_18131_18132_18133_18134_18135_18136_18137_18138_18139_18140_18141_18142_18143_18144_18145_18146_18147_18148_18149_18150_18151_18152_18153_18154_18155_18156_18157_18158_18159_18160_18161_18162_18163_18164_18165_18166_18167_18168_18169_18170_18171_18172_18173_18174_18175_18176_18177_18178_18179_18180_18181_18182_18183_18184_18185_18186_18187_18188_18189_18190_18191_18192_18193_18194_18195_18196_18197_18198_18199_18200_18201_18202_18203_18204_18205_18206_18207_18208_18209_18210_18211_18212_18213_18214_18215_18216_18217_18218_18219_18220_18221_18222_18223_18224_18225_18226_18227_18228_18229_18230_18231_18232_18233_18234_18235_18236_18237_18238_18239_18240_18241_18242_18243_18244_18245_18246_18247_18248_18249_18250_18251_18252_18253_18254_18255_18256_18257_18258_18259_18260_18261_18262_18263_18264_18265_18266_18267_18268_18269_18270_18271_18272_18273_18274_18275_18276_18277_18278_18279_18280_18281_18282_18283_18284_18285_18286_18287_18288_18289_18290_18291_18292_18293_18294_18295_18296_18297_18298_18299_18300_18301_18302_18303_18304_18305_18306_18307_18308_18309_18310_18311_18312_18313_18314_18315_18316_18317_18318_18319_18320_18321_18322_18323_18324_18325_18326_18327_18328_18329_18330_18331_18332_18333_18334_18335_18336_18337_18338_18339_18340_18341_18342_18343_18344_18345_18346_18347_18348_18349_18350_18351_18352_18353_18354_18355_18356_18357_18358_18359_18360_18361_18362_18363_18364_18365_18366_18367_18368_18369_18370_18371_18372_18373_18374_18375_18376_18377_18378_18379_18380_18381_18382_18383_18384_18385_18386_18387_18388_18389_18390_18391_18392_18393_18394_18395_18396_18397_18398_18399_18400_18401_18402_18403_18404_18405_18406_18407_18408_18409_18410_18411_18412_18413_18414_18415_18416_18417_18418_18419_18420_18421_18422_18423_18424_18425_18426_18427_18428_18429_18430_18431_18432_18433_18434_18435_18436_18437_18438_18439_18440_18441_18442_18443_18444_18445_18446_18447_18448_18449_18450_18451_18452_18453_18454_18455_18456_18457_18458_18459_18460_18461_18462_18463_18464_18465_18466_18467_18468_18469_18470_18471_18472_18473_18474_18475_18476_18477_18478_18479_18480_18481_18482_18483_18484_18485_18486_18487_18488_18489_18490_18491_18492_18493_18494_18495_18496_18497_18498_18499_18500_18501_18502_18503_18504_18505_18506_18507_18508_18509_18510_18511_18512_18513_18514_18515_18516_18517_18518_18519_18520_18521_18522_18523_18524_18525_18526_18527_18528_18529_18530_18531_18532_18533_18534_18535_18536_18537_18538_18539_18540_18541_18542_18543_18544_18545_18546_18547_18548_18549_18550_18551_18552_18553_18554_18555_18556_18557_18558_18559_18560_18561_18562_18563_18564_18565_18566_18567_18568_18569_18570_18571_18572_18573_18574_18575_18576_18577_18578_18579_18580_18581_18582_18583_18584_18585_18586_18587_18588_18589_18590_18591_18592_18593_18594_18595_18596_18597_18598_18599_18600_18601_18602_18603_18604_18605_18606_18607_18608_18609_18610_18611_18612_18613_18614_18615_18616_18617_18618_18619_18620_18621_18622_18623_18624_18625_18626_18627_18628_18629_18630_18631_18632_18633_18634_18635_18636_18637_18638_18639_18640_18641_18642_18643_18644_18645_18646_18647_18648_18649_18650_18651_18652_18653_18654_18655_18656_18657_18658_18659_18660_18661_18662_18663_18664_18665_18666_18667_18668_18669_18670_18671_18672_18673_18674_18675_18676_18677_18678_18679_18680_18681_18682_18683_18684_18685_18686_18687_18688_18689_18690_18691_18692_18693_18694_18695_18696_18697_18698_18699_18700_18701_18702_18703_18704_18705_18706_18707_18708_18709_18710_18711_18712_18713_18714_18715_18716_18717_18718_18719_18720_18721_18722_18723_18724_18725_18726_18727_18728_18729_18730_18731_18732_18733_18734_18735_18736_18737_18738_18739_18740_18741_18742_18743_18744_18745_18746_18747_18748_18749_18750_18751_18752_18753_18754_18755_18756_18757_18758_18759_18760_18761_18762_18763_18764_18765_18766_18767_18768_18769_18770_18771_18772_18773_18774_18775_18776_18777_18778_18779_18780_18781_18782_18783_18784_18785_18786_18787_18788_18789_18790_18791_18792_18793_18794_18795_18796_18797_18798_18799_18800_18801_18802_18803_18804_18805_18806_18807_18808_18809_18810_18811_18812_18813_18814_18815_18816_18817_18818_18819_18820_18821_18822_18823_18824_18825_18826_18827_18828_18829_18830_18831_18832_18833_18834_18835_18836_18837_18838_18839_18840_18841_18842_18843_18844_18845_18846_18847_18848_18849_18850_18851_18852_18853_18854_18855_18856_18857_18858_18859_18860_18861_18862_18863_18864_18865_18866_18867_18868_18869_18870_18871_18872_18873_18874_18875_18876_18877_18878_18879_18880_18881_18882_18883_18884_18885_18886_18887_18888_18889_18890_18891_18892_18893_18894_18895_18896_18897_18898_18899_18900_18901_18902_18903_18904_18905_18906_18907_18908_18909_18910_18911_18912_18913_18914_18915_18916_18917_18918_18919_18920_18921_18922_18923_18924_18925_18926_18927_18928_18929_18930_18931_18932_18933_18934_18935_18936_18937_18938_18939_18940_18941_18942_18943_18944_18945_18946_18947_18948_18949_18950_18951_18952_18953_18954_18955_18956_18957_18958_18959_18960_18961_18962_18963_18964_18965_18966_18967_18968_18969_18970_18971_18972_18973_18974_18975_18976_18977_18978_18979_18980_18981_18982_18983_18984_18985_18986_18987_18988_18989_18990_18991_18992_18993_18994_18995_18996_18997_18998_18999_19000_19001_19002_19003_19004_19005_19006_19007_19008_19009_19010_19011_19012_19013_19014_19015_19016_19017_19018_19019_19020_19021_19022_19023_19024_19025_19026_19027_19028_19029_19030_19031_19032_19033_19034_19035_19036_19037_19038_19039_19040_19041_19042_19043_19044_19045_19046_19047_19048_19049_19050_19051_19052_19053_19054_19055_19056_19057_19058_19059_19060_19061_19062_19063_19064_19065_19066_19067_19068_19069_19070_19071_19072_19073_19074_19075_19076_19077_19078_19079_19080_19081_19082_19083_19084_19085_19086_19087_19088_19089_19090_19091_19092_19093_19094_19095_19096_19097_19098_19099_19100_19101_19102_19103_19104_19105_19106_19107_19108_19109_19110_19111_19112_19113_19114_19115_19116_19117_19118_19119_19120_19121_19122_19123_19124_19125_19126_19127_19128_19129_19130_19131_19132_19133_19134_19135_19136_19137_19138_19139_19140_19141_19142_19143_19144_19145_19146_19147_19148_19149_19150_19151_19152_19153_19154_19155_19156_19157_19158_19159_19160_19161_19162_19163_19164_19165_19166_19167_19168_19169_19170_19171_19172_19173_19174_19175_19176_19177_19178_19179_19180_19181_19182_19183_19184_19185_19186_19187_19188_19189_19190_19191_19192_19193_19194_19195_19196_19197_19198_19199_19200_19201_19202_19203_19204_19205_19206_19207_19208_19209_19210_19211_19212_19213_19214_19215_19216_19217_19218_19219_19220_19221_19222_19223_19224_19225_19226_19227_19228_19229_19230_19231_19232_19233_19234_19235_19236_19237_19238_19239_19240_19241_19242_19243_19244_19245_19246_19247_19248_19249_19250_19251_19252_19253_19254_19255_19256_19257_19258_19259_19260_19261_19262_19263_19264_19265_19266_19267_19268_19269_19270_19271_19272_19273_19274_19275_19276_19277_19278_19279_19280_19281_19282_19283_19284_19285_19286_19287_19288_19289_19290_19291_19292_19293_19294_19295_19296_19297_19298_19299_19300_19301_19302_19303_19304_19305_19306_19307_19308_19309_19310_19311_19312_19313_19314_19315_19316_19317_19318_19319_19320_19321_19322_19323_19324_19325_19326_19327_19328_19329_19330_19331_19332_19333_19334_19335_19336_19337_19338_19339_19340_19341_19342_19343_19344_19345_19346_19347_19348_19349_19350_19351_19352_19353_19354_19355_19356_19357_19358_19359_19360_19361_19362_19363_19364_19365_19366_19367_19368_19369_19370_19371_19372_19373_19374_19375_19376_19377_19378_19379_19380_19381_19382_19383_19384_19385_19386_19387_19388_19389_19390_19391_19392_19393_19394_19395_19396_19397_19398_19399_19400_19401_19402_19403_19404_19405_19406_19407_19408_19409_19410_19411_19412_19413_19414_19415_19416_19417_19418_19419_19420_19421_19422_19423_19424_19425_19426_19427_19428_19429_19430_19431_19432_19433_19434_19435_19436_19437_19438_19439_19440_19441_19442_19443_19444_19445_19446_19447_19448_19449_19450_19451_19452_19453_19454_19455_19456_19457_19458_19459_19460_19461_19462_19463_19464_19465_19466_19467_19468_19469_19470_19471_19472_19473_19474_19475_19476_19477_19478_19479_19480_19481_19482_19483_19484_19485_19486_19487_19488_19489_19490_19491_19492_19493_19494_19495_19496_19497_19498_19499_19500_19501_19502_19503_19504_19505_19506_19507_19508_19509_19510_19511_19512_19513_19514_19515_19516_19517_19518_19519_19520_19521_19522_19523_19524_19525_19526_19527_19528_19529_19530_19531_19532_19533_19534_19535_19536_19537_19538_19539_19540_19541_19542_19543_19544_19545_19546_19547_19548_19549_19550_19551_19552_19553_19554_19555_19556_19557_19558_19559_19560_19561_19562_19563_19564_19565_19566_19567_19568_19569_19570_19571_19572_19573_19574_19575_19576_19577_19578_19579_19580_19581_19582_19583_19584_19585_19586_19587_19588_19589_19590_19591_19592_19593_19594_19595_19596_19597_19598_19599_19600_19601_19602_19603_19604_19605_19606_19607_19608_19609_19610_19611_19612_19613_19614_19615_19616_19617_19618_19619_19620_19621_19622_19623_19624_19625_19626_19627_19628_19629_19630_19631_19632_19633_19634_19635_19636_19637_19638_19639_19640_19641_19642_19643_19644_19645_19646_19647_19648_19649_19650_19651_19652_19653_19654_19655_19656_19657_19658_19659_19660_19661_19662_19663_19664_19665_19666_19667_19668_19669_19670_19671_19672_19673_19674_19675_19676_19677_19678_19679_19680_19681_19682_19683_19684_19685_19686_19687_19688_19689_19690_19691_19692_19693_19694_19695_19696_19697_19698_19699_19700_19701_19702_19703_19704_19705_19706_19707_19708_19709_19710_19711_19712_19713_19714_19715_19716_19717_19718_19719_19720_19721_19722_19723_19724_19725_19726_19727_19728_19729_19730_19731_19732_19733_19734_19735_19736_19737_19738_19739_19740_19741_19742_19743_19744_19745_19746_19747_19748_19749_19750_19751_19752_19753_19754_19755_19756_19757_19758_19759_19760_19761_19762_19763_19764_19765_19766_19767_19768_19769_19770_19771_19772_19773_19774_19775_19776_19777_19778_19779_19780_19781_19782_19783_19784_19785_19786_19787_19788_19789_19790_19791_19792_19793_19794_19795_19796_19797_19798_19799_19800_19801_19802_19803_19804_19805_19806_19807_19808_19809_19810_19811_19812_19813_19814_19815_19816_19817_19818_19819_19820_19821_19822_19823_19824_19825_19826_19827_19828_19829_19830_19831_19832_19833_19834_19835_19836_19837_19838_19839_19840_19841_19842_19843_19844_19845_19846_19847_19848_19849_19850_19851_19852_19853_19854_19855_19856_19857_19858_19859_19860_19861_19862_19863_19864_19865_19866_19867_19868_19869_19870_19871_19872_19873_19874_19875_19876_19877_19878_19879_19880_19881_19882_19883_19884_19885_19886_19887_19888_19889_19890_19891_19892_19893_19894_19895_19896_19897_19898_19899_19900_19901_19902_19903_19904_19905_19906_19907_19908_19909_19910_19911_19912_19913_19914_19915_19916_19917_19918_19919_19920_19921_19922_19923_19924_19925_19926_19927_19928_19929_19930_19931_19932_19933_19934_19935_19936_19937_19938_19939_19940_19941_19942_19943_19944_19945_19946_19947_19948_19949_19950_19951_19952_19953_19954_19955_19956_19957_19958_19959_19960_19961_19962_19963_19964_19965_19966_19967_19968_19969_19970_19971_19972_19973_19974_19975_19976_19977_19978_19979_19980_19981_19982_19983_19984_19985_19986_19987_19988_19989_19990_19991_19992_19993_19994_19995_19996_19997_19998_19999_20000_20001_20002_20003_20004_20005_20006_20007_20008_20009_20010_20011_20012_20013_20014_20015_20016_20017_20018_20019_20020_20021_20022_20023_20024_20025_20026_20027_20028_20029_20030_20031_20032_20033_20034_20035_20036_20037_20038_20039_20040_20041_20042_20043_20044_20045_20046_20047_20048_20049_20050_20051_20052_20053_20054_20055_20056_20057_20058_20059_20060_20061_20062_20063_20064_20065_20066_20067_20068_20069_20070_20071_20072_20073_20074_20075_20076_20077_20078_20079_20080_20081_20082_20083_20084_20085_20086_20087_20088_20089_20090_20091_20092_20093_20094_20095_20096_20097_20098_20099_20100_20101_20102_20103_20104_20105_20106_20107_20108_20109_20110_20111_20112_20113_20114_20115_20116_20117_20118_20119_20120_20121_20122_20123_20124_20125_20126_20127_20128_20129_20130_20131_20132_20133_20134_20135_20136_20137_20138_20139_20140_20141_20142_20143_20144_20145_20146_20147_20148_20149_20150_20151_20152_20153_20154_20155_20156_20157_20158_20159_20160_20161_20162_20163_20164_20165_20166_20167_20168_20169_20170_20171_20172_20173_20174_20175_20176_20177_20178_20179_20180_20181_20182_20183_20184_20185_20186_20187_20188_20189_20190_20191_20192_20193_20194_20195_20196_20197_20198_20199_20200_20201_20202_20203_20204_20205_20206_20207_20208_20209_20210_20211_20212_20213_20214_20215_20216_20217_20218_20219_20220_20221_20222_20223_20224_20225_20226_20227_20228_20229_20230_20231_20232_20233_20234_20235_20236_20237_20238_20239_20240_20241_20242_20243_20244_20245_20246_20247_20248_20249_20250_20251_20252_20253_20254_20255_20256_20257_20258_20259_20260_20261_20262_20263_20264_20265_20266_20267_20268_20269_20270_20271_20272_20273_20274_20275_20276_20277_20278_20279_20280_20281_20282_20283_20284_20285_20286_20287_20288_20289_20290_20291_20292_20293_20294_20295_20296_20297_20298_20299_20300_20301_20302_20303_20304_20305_20306_20307_20308_20309_20310_20311_20312_20313_20314_20315_20316_20317_20318_20319_20320_20321_20322_20323_20324_20325_20326_20327_20328_20329_20330_20331_20332_20333_20334_20335_20336_20337_20338_20339_20340_20341_20342_20343_20344_20345_20346_20347_20348_20349_20350_20351_20352_20353_20354_20355_20356_20357_20358_20359_20360_20361_20362_20363_20364_20365_20366_20367_20368_20369_20370_20371_20372_20373_20374_20375_20376_20377_20378_20379_20380_20381_20382_20383_20384_20385_20386_20387_20388_20389_20390_20391_20392_20393_20394_20395_20396_20397_20398_20399_20400_20401_20402_20403_20404_20405_20406_20407_20408_20409_20410_20411_20412_20413_20414_20415_20416_20417_20418_20419_20420_20421_20422_20423_20424_20425_20426_20427_20428_20429_20430_20431_20432_20433_20434_20435_20436_20437_20438_20439_20440_20441_20442_20443_20444_20445_20446_20447_20448_20449_20450_20451_20452_20453_20454_20455_20456_20457_20458_20459_20460_20461_20462_20463_20464_20465_20466_20467_20468_20469_20470_20471_20472_20473_20474_20475_20476_20477_20478_20479_20480_20481_20482_20483_20484_20485_20486_20487_20488_20489_20490_20491_20492_20493_20494_20495_20496_20497_20498_20499_20500_20501_20502_20503_20504_20505_20506_20507_20508_20509_20510_20511_20512_20513_20514_20515_20516_20517_20518_20519_20520_20521_20522_20523_20524_20525_20526_20527_20528_20529_20530_20531_20532_20533_20534_20535_20536_20537_20538_20539_20540_20541_20542_20543_20544_20545_20546_20547_20548_20549_20550_20551_20552_20553_20554_20555_20556_20557_20558_20559_20560_20561_20562_20563_20564_20565_20566_20567_20568_20569_20570_20571_20572_20573_20574_20575_20576_20577_20578_20579_20580_20581_20582_20583_20584_20585_20586_20587_20588_20589_20590_20591_20592_20593_20594_20595_20596_20597_20598_20599_20600_20601_20602_20603_20604_20605_20606_20607_20608_20609_20610_20611_20612_20613_20614_20615_20616_20617_20618_20619_20620_20621_20622_20623_20624_20625_20626_20627_20628_20629_20630_20631_20632_20633_20634_20635_20636_20637_20638_20639_20640_20641_20642_20643_20644_20645_20646_20647_20648_20649_20650_20651_20652_20653_20654_20655_20656_20657_20658_20659_20660_20661_20662_20663_20664_20665_20666_20667_20668_20669_20670_20671_20672_20673_20674_20675_20676_20677_20678_20679_20680_20681_20682_20683_20684_20685_20686_20687_20688_20689_20690_20691_20692_20693_20694_20695_20696_20697_20698_20699_20700_20701_20702_20703_20704_20705_20706_20707_20708_20709_20710_20711_20712_20713_20714_20715_20716_20717_20718_20719_20720_20721_20722_20723_20724_20725_20726_20727_20728_20729_20730_20731_20732_20733_20734_20735_20736_20737_20738_20739_20740_20741_20742_20743_20744_20745_20746_20747_20748_20749_20750_20751_20752_20753_20754_20755_20756_20757_20758_20759_20760_20761_20762_20763_20764_20765_20766_20767_20768_20769_20770_20771_20772_20773_20774_20775_20776_20777_20778_20779_20780_20781_20782_20783_20784_20785_20786_20787_20788_20789_20790_20791_20792_20793_20794_20795_20796_20797_20798_20799_20800_20801_20802_20803_20804_20805_20806_20807_20808_20809_20810_20811_20812_20813_20814_20815_20816_20817_20818_20819_20820_20821_20822_20823_20824_20825_20826_20827_20828_20829_20830_20831_20832_20833_20834_20835_20836_20837_20838_20839_20840_20841_20842_20843_20844_20845_20846_20847_20848_20849_20850_20851_20852_20853_20854_20855_20856_20857_20858_20859_20860_20861_20862_20863_20864_20865_20866_20867_20868_20869_20870_20871_20872_20873_20874_20875_20876_20877_20878_20879_20880_20881_20882_20883_20884_20885_20886_20887_20888_20889_20890_20891_20892_20893_20894_20895_20896_20897_20898_20899_20900_20901_20902_20903_20904_20905_20906_20907_20908_20909_20910_20911_20912_20913_20914_20915_20916_20917_20918_20919_20920_20921_20922_20923_20924_20925_20926_20927_20928_20929_20930_20931_20932_20933_20934_20935_20936_20937_20938_20939_20940_20941_20942_20943_20944_20945_20946_20947_20948_20949_20950_20951_20952_20953_20954_20955_20956_20957_20958_20959_20960_20961_20962_20963_20964_20965_20966_20967_20968_20969_20970_20971_20972_20973_20974_20975_20976_20977_20978_20979_20980_20981_20982_20983_20984_20985_20986_20987_20988_20989_20990_20991_20992_20993_20994_20995_20996_20997_20998_20999_21000_21001_21002_21003_21004_21005_21006_21007_21008_21009_21010_21011_21012_21013_21014_21015_21016_21017_21018_21019_21020_21021_21022_21023_21024_21025_21026_21027_21028_21029_21030_21031_21032_21033_21034_21035_21036_21037_21038_21039_21040_21041_21042_21043_21044_21045_21046_21047_21048_21049_21050_21051_21052_21053_21054_21055_21056_21057_21058_21059_21060_21061_21062_21063_21064_21065_21066_21067_21068_21069_21070_21071_21072_21073_21074_21075_21076_21077_21078_21079_21080_21081_21082_21083_21084_21085_21086_21087_21088_21089_21090_21091_21092_21093_21094_21095_21096_21097_21098_21099_21100_21101_21102_21103_21104_21105_21106_21107_21108_21109_21110_21111_21112_21113_21114_21115_21116_21117_21118_21119_21120_21121_21122_21123_21124_21125_21126_21127_21128_21129_21130_21131_21132_21133_21134_21135_21136_21137_21138_21139_21140_21141_21142_21143_21144_21145_21146_21147_21148_21149_21150_21151_21152_21153_21154_21155_21156_21157_21158_21159_21160_21161_21162_21163_21164_21165_21166_21167_21168_21169_21170_21171_21172_21173_21174_21175_21176_21177_21178_21179_21180_21181_21182_21183_21184_21185_21186_21187_21188_21189_21190_21191_21192_21193_21194_21195_21196_21197_21198_21199_21200_21201_21202_21203_21204_21205_21206_21207_21208_21209_21210_21211_21212_21213_21214_21215_21216_21217_21218_21219_21220_21221_21222_21223_21224_21225_21226_21227_21228_21229_21230_21231_21232_21233_21234_21235_21236_21237_21238_21239_21240_21241_21242_21243_21244_21245_21246_21247_21248_21249_21250_21251_21252_21253_21254_21255_21256_21257_21258_21259_21260_21261_21262_21263_21264_21265_21266_21267_21268_21269_21270_21271_21272_21273_21274_21275_21276_21277_21278_21279_21280_21281_21282_21283_21284_21285_21286_21287_21288_21289_21290_21291_21292_21293_21294_21295_21296_21297_21298_21299_21300_21301_21302_21303_21304_21305_21306_21307_21308_21309_21310_21311_21312_21313_21314_21315_21316_21317_21318_21319_21320_21321_21322_21323_21324_21325_21326_21327_21328_21329_21330_21331_21332_21333_21334_21335_21336_21337_21338_21339_21340_21341_21342_21343_21344_21345_21346_21347_21348_21349_21350_21351_21352_21353_21354_21355_21356_21357_21358_21359_21360_21361_21362_21363_21364_21365_21366_21367_21368_21369_21370_21371_21372_21373_21374_21375_21376_21377_21378_21379_21380_21381_21382_21383_21384_21385_21386_21387_21388_21389_21390_21391_21392_21393_21394_21395_21396_21397_21398_21399_21400_21401_21402_21403_21404_21405_21406_21407_21408_21409_21410_21411_21412_21413_21414_21415_21416_21417_21418_21419_21420_21421_21422_21423_21424_21425_21426_21427_21428_21429_21430_21431_21432_21433_21434_21435_21436_21437_21438_21439_21440_21441_21442_21443_21444_21445_21446_21447_21448_21449_21450_21451_21452_21453_21454_21455_21456_21457_21458_21459_21460_21461_21462_21463_21464_21465_21466_21467_21468_21469_21470_21471_21472_21473_21474_21475_21476_21477_21478_21479_21480_21481_21482_21483_21484_21485_21486_21487_21488_21489_21490_21491_21492_21493_21494_21495_21496_21497_21498_21499_21500_21501_21502_21503_21504_21505_21506_21507_21508_21509_21510_21511_21512_21513_21514_21515_21516_21517_21518_21519_21520_21521_21522_21523_21524_21525_21526_21527_21528_21529_21530_21531_21532_21533_21534_21535_21536_21537_21538_21539_21540_21541_21542_21543_21544_21545_21546_21547_21548_21549_21550_21551_21552_21553_21554_21555_21556_21557_21558_21559_21560_21561_21562_21563_21564_21565_21566_21567_21568_21569_21570_21571_21572_21573_21574_21575_21576_21577_21578_21579_21580_21581_21582_21583_21584_21585_21586_21587_21588_21589_21590_21591_21592_21593_21594_21595_21596_21597_21598_21599_21600_21601_21602_21603_21604_21605_21606_21607_21608_21609_21610_21611_21612_21613_21614_21615_21616_21617_21618_21619_21620_21621_21622_21623_21624_21625_21626_21627_21628_21629_21630_21631_21632_21633_21634_21635_21636_21637_21638_21639_21640_21641_21642_21643_21644_21645_21646_21647_21648_21649_21650_21651_21652_21653_21654_21655_21656_21657_21658_21659_21660_21661_21662_21663_21664_21665_21666_21667_21668_21669_21670_21671_21672_21673_21674_21675_21676_21677_21678_21679_21680_21681_21682_21683_21684_21685_21686_21687_21688_21689_21690_21691_21692_21693_21694_21695_21696_21697_21698_21699_21700_21701_21702_21703_21704_21705_21706_21707_21708_21709_21710_21711_21712_21713_21714_21715_21716_21717_21718_21719_21720_21721_21722_21723_21724_21725_21726_21727_21728_21729_21730_21731_21732_21733_21734_21735_21736_21737_21738_21739_21740_21741_21742_21743_21744_21745_21746_21747_21748_21749_21750_21751_21752_21753_21754_21755_21756_21757_21758_21759_21760_21761_21762_21763_21764_21765_21766_21767_21768_21769_21770_21771_21772_21773_21774_21775_21776_21777_21778_21779_21780_21781_21782_21783_21784_21785_21786_21787_21788_21789_21790_21791_21792_21793_21794_21795_21796_21797_21798_21799_21800_21801_21802_21803_21804_21805_21806_21807_21808_21809_21810_21811_21812_21813_21814_21815_21816_21817_21818_21819_21820_21821_21822_21823_21824_21825_21826_21827_21828_21829_21830_21831_21832_21833_21834_21835_21836_21837_21838_21839_21840_21841_21842_21843_21844_21845_21846_21847_21848_21849_21850_21851_21852_21853_21854_21855_21856_21857_21858_21859_21860_21861_21862_21863_21864_21865_21866_21867_21868_21869_21870_21871_21872_21873_21874_21875_21876_21877_21878_21879_21880_21881_21882_21883_21884_21885_21886_21887_21888_21889_21890_21891_21892_21893_21894_21895_21896_21897_21898_21899_21900_21901_21902_21903_21904_21905_21906_21907_21908_21909_21910_21911_21912_21913_21914_21915_21916_21917_21918_21919_21920_21921_21922_21923_21924_21925_21926_21927_21928_21929_21930_21931_21932_21933_21934_21935_21936_21937_21938_21939_21940_21941_21942_21943_21944_21945_21946_21947_21948_21949_21950_21951_21952_21953_21954_21955_21956_21957_21958_21959_21960_21961_21962_21963_21964_21965_21966_21967_21968_21969_21970_21971_21972_21973_21974_21975_21976_21977_21978_21979_21980_21981_21982_21983_21984_21985_21986_21987_21988_21989_21990_21991_21992_21993_21994_21995_21996_21997_21998_21999_22000_22001_22002_22003_22004_22005_22006_22007_22008_22009_22010_22011_22012_22013_22014_22015_22016_22017_22018_22019_22020_22021_22022_22023_22024_22025_22026_22027_22028_22029_22030_22031_22032_22033_22034_22035_22036_22037_22038_22039_22040_22041_22042_22043_22044_22045_22046_22047_22048_22049_22050_22051_22052_22053_22054_22055_22056_22057_22058_22059_22060_22061_22062_22063_22064_22065_22066_22067_22068_22069_22070_22071_22072_22073_22074_22075_22076_22077_22078_22079_22080_22081_22082_22083_22084_22085_22086_22087_22088_22089_22090_22091_22092_22093_22094_22095_22096_22097_22098_22099_22100_22101_22102_22103_22104_22105_22106_22107_22108_22109_22110_22111_22112_22113_22114_22115_22116_22117_22118_22119_22120_22121_22122_22123_22124_22125_22126_22127_22128_22129_22130_22131_22132_22133_22134_22135_22136_22137_22138_22139_22140_22141_22142_22143_22144_22145_22146_22147_22148_22149_22150_22151_22152_22153_22154_22155_22156_22157_22158_22159_22160_22161_22162_22163_22164_22165_22166_22167_22168_22169_22170_22171_22172_22173_22174_22175_22176_22177_22178_22179_22180_22181_22182_22183_22184_22185_22186_22187_22188_22189_22190_22191_22192_22193_22194_22195_22196_22197_22198_22199_22200_22201_22202_22203_22204_22205_22206_22207_22208_22209_22210_22211_22212_22213_22214_22215_22216_22217_22218_22219_22220_22221_22222_22223_22224_22225_22226_22227_22228_22229_22230_22231_22232_22233_22234_22235_22236_22237_22238_22239_22240_22241_22242_22243_22244_22245_22246_22247_22248_22249_22250_22251_22252_22253_22254_22255_22256_22257_22258_22259_22260_22261_22262_22263_22264_22265_22266_22267_22268_22269_22270_22271_22272_22273_22274_22275_22276_22277_22278_22279_22280_22281_22282_22283_22284_22285_22286_22287_22288_22289_22290_22291_22292_22293_22294_22295_22296_22297_22298_22299_22300_22301_22302_22303_22304_22305_22306_22307_22308_22309_22310_22311_22312_22313_22314_22315_22316_22317_22318_22319_22320_22321_22322_22323_22324_22325_22326_22327_22328_22329_22330_22331_22332_22333_22334_22335_22336_22337_22338_22339_22340_22341_22342_22343_22344_22345_22346_22347_22348_22349_22350_22351_22352_22353_22354_22355_22356_22357_22358_22359_22360_22361_22362_22363_22364_22365_22366_22367_22368_22369_22370_22371_22372_22373_22374_22375_22376_22377_22378_22379_22380_22381_22382_22383_22384_22385_22386_22387_22388_22389_22390_22391_22392_22393_22394_22395_22396_22397_22398_22399_22400_22401_22402_22403_22404_22405_22406_22407_22408_22409_22410_22411_22412_22413_22414_22415_22416_22417_22418_22419_22420_22421_22422_22423_22424_22425_22426_22427_22428_22429_22430_22431_22432_22433_22434_22435_22436_22437_22438_22439_22440_22441_22442_22443_22444_22445_22446_22447_22448_22449_22450_22451_22452_22453_22454_22455_22456_22457_22458_22459_22460_22461_22462_22463_22464_22465_22466_22467_22468_22469_22470_22471_22472_22473_22474_22475_22476_22477_22478_22479_22480_22481_22482_22483_22484_22485_22486_22487_22488_22489_22490_22491_22492_22493_22494_22495_22496_22497_22498_22499_22500_22501_22502_22503_22504_22505_22506_22507_22508_22509_22510_22511_22512_22513_22514_22515_22516_22517_22518_22519_22520_22521_22522_22523_22524_22525_22526_22527_22528_22529_22530_22531_22532_22533_22534_22535_22536_22537_22538_22539_22540_22541_22542_22543_22544_22545_22546_22547_22548_22549_22550_22551_22552_22553_22554_22555_22556_22557_22558_22559_22560_22561_22562_22563_22564_22565_22566_22567_22568_22569_22570_22571_22572_22573_22574_22575_22576_22577_22578_22579_22580_22581_22582_22583_22584_22585_22586_22587_22588_22589_22590_22591_22592_22593_22594_22595_22596_22597_22598_22599_22600_22601_22602_22603_22604_22605_22606_22607_22608_22609_22610_22611_22612_22613_22614_22615_22616_22617_22618_22619_22620_22621_22622_22623_22624_22625_22626_22627_22628_22629_22630_22631_22632_22633_22634_22635_22636_22637_22638_22639_22640_22641_22642_22643_22644_22645_22646_22647_22648_22649_22650_22651_22652_22653_22654_22655_22656_22657_22658_22659_22660_22661_22662_22663_22664_22665_22666_22667_22668_22669_22670_22671_22672_22673_22674_22675_22676_22677_22678_22679_22680_22681_22682_22683_22684_22685_22686_22687_22688_22689_22690_22691_22692_22693_22694_22695_22696_22697_22698_22699_22700_22701_22702_22703_22704_22705_22706_22707_22708_22709_22710_22711_22712_22713_22714_22715_22716_22717_22718_22719_22720_22721_22722_22723_22724_22725_22726_22727_22728_22729_22730_22731_22732_22733_22734_22735_22736_22737_22738_22739_22740_22741_22742_22743_22744_22745_22746_22747_22748_22749_22750_22751_22752_22753_22754_22755_22756_22757_22758_22759_22760_22761_22762_22763_22764_22765_22766_22767_22768_22769_22770_22771_22772_22773_22774_22775_22776_22777_22778_22779_22780_22781_22782_22783_22784_22785_22786_22787_22788_22789_22790_22791_22792_22793_22794_22795_22796_22797_22798_22799_22800_22801_22802_22803_22804_22805_22806_22807_22808_22809_22810_22811_22812_22813_22814_22815_22816_22817_22818_22819_22820_22821_22822_22823_22824_22825_22826_22827_22828_22829_22830_22831_22832_22833_22834_22835_22836_22837_22838_22839_22840_22841_22842_22843_22844_22845_22846_22847_22848_22849_22850_22851_22852_22853_22854_22855_22856_22857_22858_22859_22860_22861_22862_22863_22864_22865_22866_22867_22868_22869_22870_22871_22872_22873_22874_22875_22876_22877_22878_22879_22880_22881_22882_22883_22884_22885_22886_22887_22888_22889_22890_22891_22892_22893_22894_22895_22896_22897_22898_22899_22900_22901_22902_22903_22904_22905_22906_22907_22908_22909_22910_22911_22912_22913_22914_22915_22916_22917_22918_22919_22920_22921_22922_22923_22924_22925_22926_22927_22928_22929_22930_22931_22932_22933_22934_22935_22936_22937_22938_22939_22940_22941_22942_22943_22944_22945_22946_22947_22948_22949_22950_22951_22952_22953_22954_22955_22956_22957_22958_22959_22960_22961_22962_22963_22964_22965_22966_22967_22968_22969_22970_22971_22972_22973_22974_22975_22976_22977_22978_22979_22980_22981_22982_22983_22984_22985_22986_22987_22988_22989_22990_22991_22992_22993_22994_22995_22996_22997_22998_22999_23000_23001_23002_23003_23004_23005_23006_23007_23008_23009_23010_23011_23012_23013_23014_23015_23016_23017_23018_23019_23020_23021_23022_23023_23024_23025_23026_23027_23028_23029_23030_23031_23032_23033_23034_23035_23036_23037_23038_23039_23040_23041_23042_23043_23044_23045_23046_23047_23048_23049_23050_23051_23052_23053_23054_23055_23056_23057_23058_23059_23060_23061_23062_23063_23064_23065_23066_23067_23068_23069_23070_23071_23072_23073_23074_23075_23076_23077_23078_23079_23080_23081_23082_23083_23084_23085_23086_23087_23088_23089_23090_23091_23092_23093_23094_23095_23096_23097_23098_23099_23100_23101_23102_23103_23104_23105_23106_23107_23108_23109_23110_23111_23112_23113_23114_23115_23116_23117_23118_23119_23120_23121_23122_23123_23124_23125_23126_23127_23128_23129_23130_23131_23132_23133_23134_23135_23136_23137_23138_23139_23140_23141_23142_23143_23144_23145_23146_23147_23148_23149_23150_23151_23152_23153_23154_23155_23156_23157_23158_23159_23160_23161_23162_23163_23164_23165_23166_23167_23168_23169_23170_23171_23172_23173_23174_23175_23176_23177_23178_23179_23180_23181_23182_23183_23184_23185_23186_23187_23188_23189_23190_23191_23192_23193_23194_23195_23196_23197_23198_23199_23200_23201_23202_23203_23204_23205_23206_23207_23208_23209_23210_23211_23212_23213_23214_23215_23216_23217_23218_23219_23220_23221_23222_23223_23224_23225_23226_23227_23228_23229_23230_23231_23232_23233_23234_23235_23236_23237_23238_23239_23240_23241_23242_23243_23244_23245_23246_23247_23248_23249_23250_23251_23252_23253_23254_23255_23256_23257_23258_23259_23260_23261_23262_23263_23264_23265_23266_23267_23268_23269_23270_23271_23272_23273_23274_23275_23276_23277_23278_23279_23280_23281_23282_23283_23284_23285_23286_23287_23288_23289_23290_23291_23292_23293_23294_23295_23296_23297_23298_23299_23300_23301_23302_23303_23304_23305_23306_23307_23308_23309_23310_23311_23312_23313_23314_23315_23316_23317_23318_23319_23320_23321_23322_23323_23324_23325_23326_23327_23328_23329_23330_23331_23332_23333_23334_23335_23336_23337_23338_23339_23340_23341_23342_23343_23344_23345_23346_23347_23348_23349_23350_23351_23352_23353_23354_23355_23356_23357_23358_23359_23360_23361_23362_23363_23364_23365_23366_23367_23368_23369_23370_23371_23372_23373_23374_23375_23376_23377_23378_23379_23380_23381_23382_23383_23384_23385_23386_23387_23388_23389_23390_23391_23392_23393_23394_23395_23396_23397_23398_23399_23400_23401_23402_23403_23404_23405_23406_23407_23408_23409_23410_23411_23412_23413_23414_23415_23416_23417_23418_23419_23420_23421_23422_23423_23424_23425_23426_23427_23428_23429_23430_23431_23432_23433_23434_23435_23436_23437_23438_23439_23440_23441_23442_23443_23444_23445_23446_23447_23448_23449_23450_23451_23452_23453_23454_23455_23456_23457_23458_23459_23460_23461_23462_23463_23464_23465_23466_23467_23468_23469_23470_23471_23472_23473_23474_23475_23476_23477_23478_23479_23480_23481_23482_23483_23484_23485_23486_23487_23488_23489_23490_23491_23492_23493_23494_23495_23496_23497_23498_23499_23500_23501_23502_23503_23504_23505_23506_23507_23508_23509_23510_23511_23512_23513_23514_23515_23516_23517_23518_23519_23520_23521_23522_23523_23524_23525_23526_23527_23528_23529_23530_23531_23532_23533_23534_23535_23536_23537_23538_23539_23540_23541_23542_23543_23544_23545_23546_23547_23548_23549_23550_23551_23552_23553_23554_23555_23556_23557_23558_23559_23560_23561_23562_23563_23564_23565_23566_23567_23568_23569_23570_23571_23572_23573_23574_23575_23576_23577_23578_23579_23580_23581_23582_23583_23584_23585_23586_23587_23588_23589_23590_23591_23592_23593_23594_23595_23596_23597_23598_23599_23600_23601_23602_23603_23604_23605_23606_23607_23608_23609_23610_23611_23612_23613_23614_23615_23616_23617_23618_23619_23620_23621_23622_23623_23624_23625_23626_23627_23628_23629_23630_23631_23632_23633_23634_23635_23636_23637_23638_23639_23640_23641_23642_23643_23644_23645_23646_23647_23648_23649_23650_23651_23652_23653_23654_23655_23656_23657_23658_23659_23660_23661_23662_23663_23664_23665_23666_23667_23668_23669_23670_23671_23672_23673_23674_23675_23676_23677_23678_23679_23680_23681_23682_23683_23684_23685_23686_23687_23688_23689_23690_23691_23692_23693_23694_23695_23696_23697_23698_23699_23700_23701_23702_23703_23704_23705_23706_23707_23708_23709_23710_23711_23712_23713_23714_23715_23716_23717_23718_23719_23720_23721_23722_23723_23724_23725_23726_23727_23728_23729_23730_23731_23732_23733_23734_23735_23736_23737_23738_23739_23740_23741_23742_23743_23744_23745_23746_23747_23748_23749_23750_23751_23752_23753_23754_23755_23756_23757_23758_23759_23760_23761_23762_23763_23764_23765_23766_23767_23768_23769_23770_23771_23772_23773_23774_23775_23776_23777_23778_23779_23780_23781_23782_23783_23784_23785_23786_23787_23788_23789_23790_23791_23792_23793_23794_23795_23796_23797_23798_23799_23800_23801_23802_23803_23804_23805_23806_23807_23808_23809_23810_23811_23812_23813_23814_23815_23816_23817_23818_23819_23820_23821_23822_23823_23824_23825_23826_23827_23828_23829_23830_23831_23832_23833_23834_23835_23836_23837_23838_23839_23840_23841_23842_23843_23844_23845_23846_23847_23848_23849_23850_23851_23852_23853_23854_23855_23856_23857_23858_23859_23860_23861_23862_23863_23864_23865_23866_23867_23868_23869_23870_23871_23872_23873_23874_23875_23876_23877_23878_23879_23880_23881_23882_23883_23884_23885_23886_23887_23888_23889_23890_23891_23892_23893_23894_23895_23896_23897_23898_23899_23900_23901_23902_23903_23904_23905_23906_23907_23908_23909_23910_23911_23912_23913_23914_23915_23916_23917_23918_23919_23920_23921_23922_23923_23924_23925_23926_23927_23928_23929_23930_23931_23932_23933_23934_23935_23936_23937_23938_23939_23940_23941_23942_23943_23944_23945_23946_23947_23948_23949_23950_23951_23952_23953_23954_23955_23956_23957_23958_23959_23960_23961_23962_23963_23964_23965_23966_23967_23968_23969_23970_23971_23972_23973_23974_23975_23976_23977_23978_23979_23980_23981_23982_23983_23984_23985_23986_23987_23988_23989_23990_23991_23992_23993_23994_23995_23996_23997_23998_23999_24000_24001_24002_24003_24004_24005_24006_24007_24008_24009_24010_24011_24012_24013_24014_24015_24016_24017_24018_24019_24020_24021_24022_24023_24024_24025_24026_24027_24028_24029_24030_24031_24032_24033_24034_24035_24036_24037_24038_24039_24040_24041_24042_24043_24044_24045_24046_24047_24048_24049_24050_24051_24052_24053_24054_24055_24056_24057_24058_24059_24060_24061_24062_24063_24064_24065_24066_24067_24068_24069_24070_24071_24072_24073_24074_24075_24076_24077_24078_24079_24080_24081_24082_24083_24084_24085_24086_24087_24088_24089_24090_24091_24092_24093_24094_24095_24096_24097_24098_24099_24100_24101_24102_24103_24104_24105_24106_24107_24108_24109_24110_24111_24112_24113_24114_24115_24116_24117_24118_24119_24120_24121_24122_24123_24124_24125_24126_24127_24128_24129_24130_24131_24132_24133_24134_24135_24136_24137_24138_24139_24140_24141_24142_24143_24144_24145_24146_24147_24148_24149_24150_24151_24152_24153_24154_24155_24156_24157_24158_24159_24160_24161_24162_24163_24164_24165_24166_24167_24168_24169_24170_24171_24172_24173_24174_24175_24176_24177_24178_24179_24180_24181_24182_24183_24184_24185_24186_24187_24188_24189_24190_24191_24192_24193_24194_24195_24196_24197_24198_24199_24200_24201_24202_24203_24204_24205_24206_24207_24208_24209_24210_24211_24212_24213_24214_24215_24216_24217_24218_24219_24220_24221_24222_24223_24224_24225_24226_24227_24228_24229_24230_24231_24232_24233_24234_24235_24236_24237_24238_24239_24240_24241_24242_24243_24244_24245_24246_24247_24248_24249_24250_24251_24252_24253_24254_24255_24256_24257_24258_24259_24260_24261_24262_24263_24264_24265_24266_24267_24268_24269_24270_24271_24272_24273_24274_24275_24276_24277_24278_24279_24280_24281_24282_24283_24284_24285_24286_24287_24288_24289_24290_24291_24292_24293_24294_24295_24296_24297_24298_24299_24300_24301_24302_24303_24304_24305_24306_24307_24308_24309_24310_24311_24312_24313_24314_24315_24316_24317_24318_24319_24320_24321_24322_24323_24324_24325_24326_24327_24328_24329_24330_24331_24332_24333_24334_24335_24336_24337_24338_24339_24340_24341_24342_24343_24344_24345_24346_24347_24348_24349_24350_24351_24352_24353_24354_24355_24356_24357_24358_24359_24360_24361_24362_24363_24364_24365_24366_24367_24368_24369_24370_24371_24372_24373_24374_24375_24376_24377_24378_24379_24380_24381_24382_24383_24384_24385_24386_24387_24388_24389_24390_24391_24392_24393_24394_24395_24396_24397_24398_24399_24400_24401_24402_24403_24404_24405_24406_24407_24408_24409_24410_24411_24412_24413_24414_24415_24416_24417_24418_24419_24420_24421_24422_24423_24424_24425_24426_24427_24428_24429_24430_24431_24432_24433_24434_24435_24436_24437_24438_24439_24440_24441_24442_24443_24444_24445_24446_24447_24448_24449_24450_24451_24452_24453_24454_24455_24456_24457_24458_24459_24460_24461_24462_24463_24464_24465_24466_24467_24468_24469_24470_24471_24472_24473_24474_24475_24476_24477_24478_24479_24480_24481_24482_24483_24484_24485_24486_24487_24488_24489_24490_24491_24492_24493_24494_24495_24496_24497_24498_24499_24500_24501_24502_24503_24504_24505_24506_24507_24508_24509_24510_24511_24512_24513_24514_24515_24516_24517_24518_24519_24520_24521_24522_24523_24524_24525_24526_24527_24528_24529_24530_24531_24532_24533_24534_24535_24536_24537_24538_24539_24540_24541_24542_24543_24544_24545_24546_24547_24548_24549_24550_24551_24552_24553_24554_24555_24556_24557_24558_24559_24560_24561_24562_24563_24564_24565_24566_24567_24568_24569_24570_24571_24572_24573_24574_24575_24576_24577_24578_24579_24580_24581_24582_24583_24584_24585_24586_24587_24588_24589_24590_24591_24592_24593_24594_24595_24596_24597_24598_24599_24600_24601_24602_24603_24604_24605_24606_24607_24608_24609_24610_24611_24612_24613_24614_24615_24616_24617_24618_24619_24620_24621_24622_24623_24624_24625_24626_24627_24628_24629_24630_24631_24632_24633_24634_24635_24636_24637_24638_24639_24640_24641_24642_24643_24644_24645_24646_24647_24648_24649_24650_24651_24652_24653_24654_24655_24656_24657_24658_24659_24660_24661_24662_24663_24664_24665_24666_24667_24668_24669_24670_24671_24672_24673_24674_24675_24676_24677_24678_24679_24680_24681_24682_24683_24684_24685_24686_24687_24688_24689_24690_24691_24692_24693_24694_24695_24696_24697_24698_24699_24700_24701_24702_24703_24704_24705_24706_24707_24708_24709_24710_24711_24712_24713_24714_24715_24716_24717_24718_24719_24720_24721_24722_24723_24724_24725_24726_24727_24728_24729_24730_24731_24732_24733_24734_24735_24736_24737_24738_24739_24740_24741_24742_24743_24744_24745_24746_24747_24748_24749_24750_24751_24752_24753_24754_24755_24756_24757_24758_24759_24760_24761_24762_24763_24764_24765_24766_24767_24768_24769_24770_24771_24772_24773_24774_24775_24776_24777_24778_24779_24780_24781_24782_24783_24784_24785_24786_24787_24788_24789_24790_24791_24792_24793_24794_24795_24796_24797_24798_24799_24800_24801_24802_24803_24804_24805_24806_24807_24808_24809_24810_24811_24812_24813_24814_24815_24816_24817_24818_24819_24820_24821_24822_24823_24824_24825_24826_24827_24828_24829_24830_24831_24832_24833_24834_24835_24836_24837_24838_24839_24840_24841_24842_24843_24844_24845_24846_24847_24848_24849_24850_24851_24852_24853_24854_24855_24856_24857_24858_24859_24860_24861_24862_24863_24864_24865_24866_24867_24868_24869_24870_24871_24872_24873_24874_24875_24876_24877_24878_24879_24880_24881_24882_24883_24884_24885_24886_24887_24888_24889_24890_24891_24892_24893_24894_24895_24896_24897_24898_24899_24900_24901_24902_24903_24904_24905_24906_24907_24908_24909_24910_24911_24912_24913_24914_24915_24916_24917_24918_24919_24920_24921_24922_24923_24924_24925_24926_24927_24928_24929_24930_24931_24932_24933_24934_24935_24936_24937_24938_24939_24940_24941_24942_24943_24944_24945_24946_24947_24948_24949_24950_24951_24952_24953_24954_24955_24956_24957_24958_24959_24960_24961_24962_24963_24964_24965_24966_24967_24968_24969_24970_24971_24972_24973_24974_24975_24976_24977_24978_24979_24980_24981_24982_24983_24984_24985_24986_24987_24988_24989_24990_24991_24992_24993_24994_24995_24996_24997_24998_24999_25000_25001_25002_25003_25004_25005_25006_25007_25008_25009_25010_25011_25012_25013_25014_25015_25016_25017_25018_25019_25020_25021_25022_25023_25024_25025_25026_25027_25028_25029_25030_25031_25032_25033_25034_25035_25036_25037_25038_25039_25040_25041_25042_25043_25044_25045_25046_25047_25048_25049_25050_25051_25052_25053_25054_25055_25056_25057_25058_25059_25060_25061_25062_25063_25064_25065_25066_25067_25068_25069_25070_25071_25072_25073_25074_25075_25076_25077_25078_25079_25080_25081_25082_25083_25084_25085_25086_25087_25088_25089_25090_25091_25092_25093_25094_25095_25096_25097_25098_25099_25100_25101_25102_25103_25104_25105_25106_25107_25108_25109_25110_25111_25112_25113_25114_25115_25116_25117_25118_25119_25120_25121_25122_25123_25124_25125_25126_25127_25128_25129_25130_25131_25132_25133_25134_25135_25136_25137_25138_25139_25140_25141_25142_25143_25144_25145_25146_25147_25148_25149_25150_25151_25152_25153_25154_25155_25156_25157_25158_25159_25160_25161_25162_25163_25164_25165_25166_25167_25168_25169_25170_25171_25172_25173_25174_25175_25176_25177_25178_25179_25180_25181_25182_25183_25184_25185_25186_25187_25188_25189_25190_25191_25192_25193_25194_25195_25196_25197_25198_25199_25200_25201_25202_25203_25204_25205_25206_25207_25208_25209_25210_25211_25212_25213_25214_25215_25216_25217_25218_25219_25220_25221_25222_25223_25224_25225_25226_25227_25228_25229_25230_25231_25232_25233_25234_25235_25236_25237_25238_25239_25240_25241_25242_25243_25244_25245_25246_25247_25248_25249_25250_25251_25252_25253_25254_25255_25256_25257_25258_25259_25260_25261_25262_25263_25264_25265_25266_25267_25268_25269_25270_25271_25272_25273_25274_25275_25276_25277_25278_25279_25280_25281_25282_25283_25284_25285_25286_25287_25288_25289_25290_25291_25292_25293_25294_25295_25296_25297_25298_25299_25300_25301_25302_25303_25304_25305_25306_25307_25308_25309_25310_25311_25312_25313_25314_25315_25316_25317_25318_25319_25320_25321_25322_25323_25324_25325_25326_25327_25328_25329_25330_25331_25332_25333_25334_25335_25336_25337_25338_25339_25340_25341_25342_25343_25344_25345_25346_25347_25348_25349_25350_25351_25352_25353_25354_25355_25356_25357_25358_25359_25360_25361_25362_25363_25364_25365_25366_25367_25368_25369_25370_25371_25372_25373_25374_25375_25376_25377_25378_25379_25380_25381_25382_25383_25384_25385_25386_25387_25388_25389_25390_25391_25392_25393_25394_25395_25396_25397_25398_25399_25400_25401_25402_25403_25404_25405_25406_25407_25408_25409_25410_25411_25412_25413_25414_25415_25416_25417_25418_25419_25420_25421_25422_25423_25424_25425_25426_25427_25428_25429_25430_25431_25432_25433_25434_25435_25436_25437_25438_25439_25440_25441_25442_25443_25444_25445_25446_25447_25448_25449_25450_25451_25452_25453_25454_25455_25456_25457_25458_25459_25460_25461_25462_25463_25464_25465_25466_25467_25468_25469_25470_25471_25472_25473_25474_25475_25476_25477_25478_25479_25480_25481_25482_25483_25484_25485_25486_25487_25488_25489_25490_25491_25492_25493_25494_25495_25496_25497_25498_25499_25500_25501_25502_25503_25504_25505_25506_25507_25508_25509_25510_25511_25512_25513_25514_25515_25516_25517_25518_25519_25520_25521_25522_25523_25524_25525_25526_25527_25528_25529_25530_25531_25532_25533_25534_25535_25536_25537_25538_25539_25540_25541_25542_25543_25544_25545_25546_25547_25548_25549_25550_25551_25552_25553_25554_25555_25556_25557_25558_25559_25560_25561_25562_25563_25564_25565_25566_25567_25568_25569_25570_25571_25572_25573_25574_25575_25576_25577_25578_25579_25580_25581_25582_25583_25584_25585_25586_25587_25588_25589_25590_25591_25592_25593_25594_25595_25596_25597_25598_25599_25600_25601_25602_25603_25604_25605_25606_25607_25608_25609_25610_25611_25612_25613_25614_25615_25616_25617_25618_25619_25620_25621_25622_25623_25624_25625_25626_25627_25628_25629_25630_25631_25632_25633_25634_25635_25636_25637_25638_25639_25640_25641_25642_25643_25644_25645_25646_25647_25648_25649_25650_25651_25652_25653_25654_25655_25656_25657_25658_25659_25660_25661_25662_25663_25664_25665_25666_25667_25668_25669_25670_25671_25672_25673_25674_25675_25676_25677_25678_25679_25680_25681_25682_25683_25684_25685_25686_25687_25688_25689_25690_25691_25692_25693_25694_25695_25696_25697_25698_25699_25700_25701_25702_25703_25704_25705_25706_25707_25708_25709_25710_25711_25712_25713_25714_25715_25716_25717_25718_25719_25720_25721_25722_25723_25724_25725_25726_25727_25728_25729_25730_25731_25732_25733_25734_25735_25736_25737_25738_25739_25740_25741_25742_25743_25744_25745_25746_25747_25748_25749_25750_25751_25752_25753_25754_25755_25756_25757_25758_25759_25760_25761_25762_25763_25764_25765_25766_25767_25768_25769_25770_25771_25772_25773_25774_25775_25776_25777_25778_25779_25780_25781_25782_25783_25784_25785_25786_25787_25788_25789_25790_25791_25792_25793_25794_25795_25796_25797_25798_25799_25800_25801_25802_25803_25804_25805_25806_25807_25808_25809_25810_25811_25812_25813_25814_25815_25816_25817_25818_25819_25820_25821_25822_25823_25824_25825_25826_25827_25828_25829_25830_25831_25832_25833_25834_25835_25836_25837_25838_25839_25840_25841_25842_25843_25844_25845_25846_25847_25848_25849_25850_25851_25852_25853_25854_25855_25856_25857_25858_25859_25860_25861_25862_25863_25864_25865_25866_25867_25868_25869_25870_25871_25872_25873_25874_25875_25876_25877_25878_25879_25880_25881_25882_25883_25884_25885_25886_25887_25888_25889_25890_25891_25892_25893_25894_25895_25896_25897_25898_25899_25900_25901_25902_25903_25904_25905_25906_25907_25908_25909_25910_25911_25912_25913_25914_25915_25916_25917_25918_25919_25920_25921_25922_25923_25924_25925_25926_25927_25928_25929_25930_25931_25932_25933_25934_25935_25936_25937_25938_25939_25940_25941_25942_25943_25944_25945_25946_25947_25948_25949_25950_25951_25952_25953_25954_25955_25956_25957_25958_25959_25960_25961_25962_25963_25964_25965_25966_25967_25968_25969_25970_25971_25972_25973_25974_25975_25976_25977_25978_25979_25980_25981_25982_25983_25984_25985_25986_25987_25988_25989_25990_25991_25992_25993_25994_25995_25996_25997_25998_25999_26000_26001_26002_26003_26004_26005_26006_26007_26008_26009_26010_26011_26012_26013_26014_26015_26016_26017_26018_26019_26020_26021_26022_26023_26024_26025_26026_26027_26028_26029_26030_26031_26032_26033_26034_26035_26036_26037_26038_26039_26040_26041_26042_26043_26044_26045_26046_26047_26048_26049_26050_26051_26052_26053_26054_26055_26056_26057_26058_26059_26060_26061_26062_26063_26064_26065_26066_26067_26068_26069_26070_26071_26072_26073_26074_26075_26076_26077_26078_26079_26080_26081_26082_26083_26084_26085_26086_26087_26088_26089_26090_26091_26092_26093_26094_26095_26096_26097_26098_26099_26100_26101_26102_26103_26104_26105_26106_26107_26108_26109_26110_26111_26112_26113_26114_26115_26116_26117_26118_26119_26120_26121_26122_26123_26124_26125_26126_26127_26128_26129_26130_26131_26132_26133_26134_26135_26136_26137_26138_26139_26140_26141_26142_26143_26144_26145_26146_26147_26148_26149_26150_26151_26152_26153_26154_26155_26156_26157_26158_26159_26160_26161_26162_26163_26164_26165_26166_26167_26168_26169_26170_26171_26172_26173_26174_26175_26176_26177_26178_26179_26180_26181_26182_26183_26184_26185_26186_26187_26188_26189_26190_26191_26192_26193_26194_26195_26196_26197_26198_26199_26200_26201_26202_26203_26204_26205_26206_26207_26208_26209_26210_26211_26212_26213_26214_26215_26216_26217_26218_26219_26220_26221_26222_26223_26224_26225_26226_26227_26228_26229_26230_26231_26232_26233_26234_26235_26236_26237_26238_26239_26240_26241_26242_26243_26244_26245_26246_26247_26248_26249_26250_26251_26252_26253_26254_26255_26256_26257_26258_26259_26260_26261_26262_26263_26264_26265_26266_26267_26268_26269_26270_26271_26272_26273_26274_26275_26276_26277_26278_26279_26280_26281_26282_26283_26284_26285_26286_26287_26288_26289_26290_26291_26292_26293_26294_26295_26296_26297_26298_26299_26300_26301_26302_26303_26304_26305_26306_26307_26308_26309_26310_26311_26312_26313_26314_26315_26316_26317_26318_26319_26320_26321_26322_26323_26324_26325_26326_26327_26328_26329_26330_26331_26332_26333_26334_26335_26336_26337_26338_26339_26340_26341_26342_26343_26344_26345_26346_26347_26348_26349_26350_26351_26352_26353_26354_26355_26356_26357_26358_26359_26360_26361_26362_26363_26364_26365_26366_26367_26368_26369_26370_26371_26372_26373_26374_26375_26376_26377_26378_26379_26380_26381_26382_26383_26384_26385_26386_26387_26388_26389_26390_26391_26392_26393_26394_26395_26396_26397_26398_26399_26400_26401_26402_26403_26404_26405_26406_26407_26408_26409_26410_26411_26412_26413_26414_26415_26416_26417_26418_26419_26420_26421_26422_26423_26424_26425_26426_26427_26428_26429_26430_26431_26432_26433_26434_26435_26436_26437_26438_26439_26440_26441_26442_26443_26444_26445_26446_26447_26448_26449_26450_26451_26452_26453_26454_26455_26456_26457_26458_26459_26460_26461_26462_26463_26464_26465_26466_26467_26468_26469_26470_26471_26472_26473_26474_26475_26476_26477_26478_26479_26480_26481_26482_26483_26484_26485_26486_26487_26488_26489_26490_26491_26492_26493_26494_26495_26496_26497_26498_26499_26500_26501_26502_26503_26504_26505_26506_26507_26508_26509_26510_26511_26512_26513_26514_26515_26516_26517_26518_26519_26520_26521_26522_26523_26524_26525_26526_26527_26528_26529_26530_26531_26532_26533_26534_26535_26536_26537_26538_26539_26540_26541_26542_26543_26544_26545_26546_26547_26548_26549_26550_26551_26552_26553_26554_26555_26556_26557_26558_26559_26560_26561_26562_26563_26564_26565_26566_26567_26568_26569_26570_26571_26572_26573_26574_26575_26576_26577_26578_26579_26580_26581_26582_26583_26584_26585_26586_26587_26588_26589_26590_26591_26592_26593_26594_26595_26596_26597_26598_26599_26600_26601_26602_26603_26604_26605_26606_26607_26608_26609_26610_26611_26612_26613_26614_26615_26616_26617_26618_26619_26620_26621_26622_26623_26624_26625_26626_26627_26628_26629_26630_26631_26632_26633_26634_26635_26636_26637_26638_26639_26640_26641_26642_26643_26644_26645_26646_26647_26648_26649_26650_26651_26652_26653_26654_26655_26656_26657_26658_26659_26660_26661_26662_26663_26664_26665_26666_26667_26668_26669_26670_26671_26672_26673_26674_26675_26676_26677_26678_26679_26680_26681_26682_26683_26684_26685_26686_26687_26688_26689_26690_26691_26692_26693_26694_26695_26696_26697_26698_26699_26700_26701_26702_26703_26704_26705_26706_26707_26708_26709_26710_26711_26712_26713_26714_26715_26716_26717_26718_26719_26720_26721_26722_26723_26724_26725_26726_26727_26728_26729_26730_26731_26732_26733_26734_26735_26736_26737_26738_26739_26740_26741_26742_26743_26744_26745_26746_26747_26748_26749_26750_26751_26752_26753_26754_26755_26756_26757_26758_26759_26760_26761_26762_26763_26764_26765_26766_26767_26768_26769_26770_26771_26772_26773_26774_26775_26776_26777_26778_26779_26780_26781_26782_26783_26784_26785_26786_26787_26788_26789_26790_26791_26792_26793_26794_26795_26796_26797_26798_26799_26800_26801_26802_26803_26804_26805_26806_26807_26808_26809_26810_26811_26812_26813_26814_26815_26816_26817_26818_26819_26820_26821_26822_26823_26824_26825_26826_26827_26828_26829_26830_26831_26832_26833_26834_26835_26836_26837_26838_26839_26840_26841_26842_26843_26844_26845_26846_26847_26848_26849_26850_26851_26852_26853_26854_26855_26856_26857_26858_26859_26860_26861_26862_26863_26864_26865_26866_26867_26868_26869_26870_26871_26872_26873_26874_26875_26876_26877_26878_26879_26880_26881_26882_26883_26884_26885_26886_26887_26888_26889_26890_26891_26892_26893_26894_26895_26896_26897_26898_26899_26900_26901_26902_26903_26904_26905_26906_26907_26908_26909_26910_26911_26912_26913_26914_26915_26916_26917_26918_26919_26920_26921_26922_26923_26924_26925_26926_26927_26928_26929_26930_26931_26932_26933_26934_26935_26936_26937_26938_26939_26940_26941_26942_26943_26944_26945_26946_26947_26948_26949_26950_26951_26952_26953_26954_26955_26956_26957_26958_26959_26960_26961_26962_26963_26964_26965_26966_26967_26968_26969_26970_26971_26972_26973_26974_26975_26976_26977_26978_26979_26980_26981_26982_26983_26984_26985_26986_26987_26988_26989_26990_26991_26992_26993_26994_26995_26996_26997_26998_26999_27000_27001_27002_27003_27004_27005_27006_27007_27008_27009_27010_27011_27012_27013_27014_27015_27016_27017_27018_27019_27020_27021_27022_27023_27024_27025_27026_27027_27028_27029_27030_27031_27032_27033_27034_27035_27036_27037_27038_27039_27040_27041_27042_27043_27044_27045_27046_27047_27048_27049_27050_27051_27052_27053_27054_27055_27056_27057_27058_27059_27060_27061_27062_27063_27064_27065_27066_27067_27068_27069_27070_27071_27072_27073_27074_27075_27076_27077_27078_27079_27080_27081_27082_27083_27084_27085_27086_27087_27088_27089_27090_27091_27092_27093_27094_27095_27096_27097_27098_27099_27100_27101_27102_27103_27104_27105_27106_27107_27108_27109_27110_27111_27112_27113_27114_27115_27116_27117_27118_27119_27120_27121_27122_27123_27124_27125_27126_27127_27128_27129_27130_27131_27132_27133_27134_27135_27136_27137_27138_27139_27140_27141_27142_27143_27144_27145_27146_27147_27148_27149_27150_27151_27152_27153_27154_27155_27156_27157_27158_27159_27160_27161_27162_27163_27164_27165_27166_27167_27168_27169_27170_27171_27172_27173_27174_27175_27176_27177_27178_27179_27180_27181_27182_27183_27184_27185_27186_27187_27188_27189_27190_27191_27192_27193_27194_27195_27196_27197_27198_27199_27200_27201_27202_27203_27204_27205_27206_27207_27208_27209_27210_27211_27212_27213_27214_27215_27216_27217' + + } + + postContractCall(_: PostContractCallInput): void { + } + + preTxExecute(_: PreTxExecuteInput): void { + } + + postTxExecute(_: PostTxExecuteInput): void { + } +} + +// 2.register aspect Instance +const aspect = new LargeSizeAspect300K(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/basic.ts b/packages/testcases/aspect/basic.ts new file mode 100644 index 0000000..3eb33a6 --- /dev/null +++ b/packages/testcases/aspect/basic.ts @@ -0,0 +1,60 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, + } from '@artela/aspect-libs'; + + // Dummy Aspect that does not do anything, just used to test the aspect basic features. + class BasicAspect implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void {} + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + operation(input: OperationInput): Uint8Array { + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + } + + postContractCall(_: PostContractCallInput): void { + } + + preTxExecute(_: PreTxExecuteInput): void { + } + + postTxExecute(_: PostTxExecuteInput): void { + } + } + + // 2.register aspect Instance + const aspect = new BasicAspect(); + entryPoint.setOperationAspect(aspect); + entryPoint.setAspect(aspect); + + // 3.must export it + export { execute, allocate }; + \ No newline at end of file diff --git a/packages/testcases/aspect/black-list.ts b/packages/testcases/aspect/black-list.ts index c0e15a7..cfc58cd 100644 --- a/packages/testcases/aspect/black-list.ts +++ b/packages/testcases/aspect/black-list.ts @@ -3,7 +3,7 @@ import { entryPoint, execute, IPreContractCallJP, - uint8ArrayToHex, sys, IAspectOperation, stringToUint8Array, + uint8ArrayToHex, sys, IAspectOperation, stringToUint8Array, InitInput, PreContractCallInput, OperationInput, uint8ArrayToString, ethereum } from "@artela/aspect-libs"; @@ -102,6 +102,7 @@ class Aspect implements IPreContractCallJP, IAspectOperation { return stringToUint8Array("success"); } + init(input: InitInput): void {} } // 2.register aspect Instance diff --git a/packages/testcases/aspect/call-tree-aspect.ts b/packages/testcases/aspect/call-tree-aspect.ts new file mode 100644 index 0000000..9f344de --- /dev/null +++ b/packages/testcases/aspect/call-tree-aspect.ts @@ -0,0 +1,73 @@ +// The entry file of your WebAssembly module. + +import { + allocate, CallTreeQuery, + entryPoint, EthCallTree, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; +import {Protobuf} from "as-proto/assembly"; + +// Dummy Aspect that does not do anything, just used to test the aspect basic features. +class CallTreeAspect implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void {} + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + operation(input: OperationInput): Uint8Array { + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + sys.revert("preContractCall revert"); + } + + postContractCall(_: PostContractCallInput): void { + const rawCallTree = sys.hostApi.trace.queryCallTree(new CallTreeQuery(-1)); + sys.aspect.mutableState.get('dummy').set(rawCallTree); + + const callTree = Protobuf.decode(rawCallTree, EthCallTree.decode); + for (let i = 0; i < callTree.calls.length; i++) { + const call = callTree.calls[i]; + sys.log("=================== call.index: " + call.index.toString(10)); + sys.log("=================== call.from: " + uint8ArrayToHex(call.from)); + sys.log("=================== call.to: " + uint8ArrayToHex(call.to)); + } + } + + preTxExecute(_: PreTxExecuteInput): void { + sys.revert("preTx revert"); + } + + postTxExecute(_: PostTxExecuteInput): void { + sys.revert("postTx revert"); + } +} + +// 2.register aspect Instance +const aspect = new CallTreeAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/context-aspect.ts b/packages/testcases/aspect/context-aspect.ts index 4c58aa0..bc207f0 100644 --- a/packages/testcases/aspect/context-aspect.ts +++ b/packages/testcases/aspect/context-aspect.ts @@ -7,6 +7,7 @@ import { EthAccessList, EthLogs, execute, + InitInput, IntArrayData, IntData, IPostContractCallJP, @@ -2027,6 +2028,8 @@ class ContextAspect // const msgErrData = Protobuf.decode(msgErr, StringData.decode); // sys.log(logPrefix + " " + "msg.result.error" + " " + msgErrData.data) } + + init(input: InitInput): void {} } // 2.register aspect Instance diff --git a/packages/testcases/aspect/context-key-check.ts b/packages/testcases/aspect/context-key-check.ts index dbf2705..86069e5 100644 --- a/packages/testcases/aspect/context-key-check.ts +++ b/packages/testcases/aspect/context-key-check.ts @@ -1,318 +1,319 @@ +import { Protobuf } from 'as-proto/assembly'; import { - allocate, - BoolData, - BytesData, - entryPoint, - EthAccessList, - EthAccessTuple, - EthLog, - EthLogs, - execute, IAspectOperation, - IntArrayData, - IntData, - IPostContractCallJP, - IPostTxExecuteJP, - IPreContractCallJP, - IPreTxExecuteJP, - ITransactionVerifier, OperationInput, - PostContractCallInput, - PostTxExecuteInput, - PreContractCallInput, - PreTxExecuteInput, - StringArrayData, - StringData, stringToUint8Array, - sys, - TxVerifyInput, - uint8ArrayToHex, uint8ArrayToString, - UintData -} from "@artela/aspect-libs"; -import {Protobuf} from "as-proto/assembly"; + allocate, + BoolData, + BytesData, + entryPoint, + EthAccessList, + EthAccessTuple, + EthLog, + EthLogs, + execute, + IAspectOperation, + InitInput, + IntArrayData, + IntData, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + ITransactionVerifier, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + StringArrayData, + StringData, + stringToUint8Array, + sys, + TxVerifyInput, + uint8ArrayToHex, + uint8ArrayToString, + UintData, +} from '@artela/aspect-libs'; // 导入必要的 AssemblyScript 模块 enum CtxType { - BoolData, - BytesData, - IntData, - UintData, - StringData, - IntArrayData, - StringArrayData, - EthAccessList, - EthLogs, + BoolData, + BytesData, + IntData, + UintData, + StringData, + IntArrayData, + StringArrayData, + EthAccessList, + EthLogs, } - // ABI 解码函数 export function decodeStringFromABI(abiData: Uint8Array): string { - const inputs = abiData.slice(0, 4); - const offsetStr = uint8ArrayToHex(abiData.slice(4, 36)); - const lengthStr = uint8ArrayToHex(abiData.slice(36, 68)); - const offset = i32.parse(offsetStr, 16); - const length = i32.parse(lengthStr, 16); - const data = abiData.slice(68, 68 + length); - return String.UTF8.decode(data.buffer, false); + const inputs = abiData.slice(0, 4); + const offsetStr = uint8ArrayToHex(abiData.slice(4, 36)); + const lengthStr = uint8ArrayToHex(abiData.slice(36, 68)); + const offset = i32.parse(offsetStr, 16); + const length = i32.parse(lengthStr, 16); + const data = abiData.slice(68, 68 + length); + return String.UTF8.decode(data.buffer, false); } - -function getContext(valType: CtxType, key: string): string|null { - - const rawValue = sys.hostApi.runtimeContext.get(key) - if (!(rawValue && (rawValue.length > 0))) { - sys.log("||| failed to get '" + key + "'") - return null; - } - let realValue: string - switch (valType) { - case CtxType.BoolData: - realValue = Protobuf.decode(rawValue, BoolData.decode).data.toString() - break - case CtxType.BytesData: - if (rawValue.length > 0) { - var bytesData = Protobuf.decode(rawValue, BytesData.decode); - if (bytesData.data) { - realValue = uint8ArrayToHex(bytesData.data); - break - } - } - realValue = ""; - break - case CtxType.UintData: - realValue = Protobuf.decode(rawValue, UintData.decode).data.toString(10) - break - case CtxType.IntData: - realValue = Protobuf.decode(rawValue, IntData.decode).data.toString(10) - break - case CtxType.IntArrayData: - const intAres = Protobuf.decode(rawValue, IntArrayData.decode).data; - realValue = `[${intAres.map((v: i64) => v.toString(10)).join(', ')}]` - break - case CtxType.EthAccessList: - const ethAcArr = Protobuf.decode(rawValue, EthAccessList.decode).accessList - realValue = `[${ethAcArr.map((v: EthAccessTuple) => v.address).join(', ')}]` - break - case CtxType.StringArrayData: - const strArr = Protobuf.decode(rawValue, StringArrayData.decode).data - realValue = `[${strArr.join(', ')}]` - break - case CtxType.StringData: - realValue = Protobuf.decode(rawValue, StringData.decode).data - break - case CtxType.EthLogs: - const ethLogs = Protobuf.decode(rawValue, EthLogs.decode).logs - realValue = `[${ethLogs.map((v: EthLog) => uint8ArrayToHex(v.address)).join(', ')}]` - break - default: - realValue = "" - break; - } - return realValue +function getContext(valType: CtxType, key: string): string | null { + const rawValue = sys.hostApi.runtimeContext.get(key); + if (!(rawValue && rawValue.length > 0)) { + sys.log("||| failed to get '" + key + "'"); + return null; + } + let realValue: string; + switch (valType) { + case CtxType.BoolData: + realValue = Protobuf.decode(rawValue, BoolData.decode).data.toString(); + break; + case CtxType.BytesData: + if (rawValue.length > 0) { + var bytesData = Protobuf.decode(rawValue, BytesData.decode); + if (bytesData.data) { + realValue = uint8ArrayToHex(bytesData.data); + break; + } + } + realValue = ''; + break; + case CtxType.UintData: + realValue = Protobuf.decode(rawValue, UintData.decode).data.toString(10); + break; + case CtxType.IntData: + realValue = Protobuf.decode(rawValue, IntData.decode).data.toString(10); + break; + case CtxType.IntArrayData: + const intAres = Protobuf.decode(rawValue, IntArrayData.decode).data; + realValue = `[${intAres.map((v: i64) => v.toString(10)).join(', ')}]`; + break; + case CtxType.EthAccessList: + const ethAcArr = Protobuf.decode(rawValue, EthAccessList.decode).accessList; + realValue = `[${ethAcArr.map((v: EthAccessTuple) => v.address).join(', ')}]`; + break; + case CtxType.StringArrayData: + const strArr = Protobuf.decode(rawValue, StringArrayData.decode).data; + realValue = `[${strArr.join(', ')}]`; + break; + case CtxType.StringData: + realValue = Protobuf.decode(rawValue, StringData.decode).data; + break; + case CtxType.EthLogs: + const ethLogs = Protobuf.decode(rawValue, EthLogs.decode).logs; + realValue = `[${ethLogs.map((v: EthLog) => uint8ArrayToHex(v.address)).join(', ')}]`; + break; + default: + realValue = ''; + break; + } + return realValue; } function newAllKeys(): Map { - const ck: Map = new Map() + const ck: Map = new Map(); - ck.set("isCall", CtxType.BoolData) - ck.set("block.header.parentHash", CtxType.BytesData) - ck.set("block.header.miner", CtxType.BytesData) - ck.set("block.header.transactionsRoot", CtxType.BytesData) - ck.set("block.header.number", CtxType.UintData) - ck.set("block.header.timestamp", CtxType.UintData) - ck.set("env.extraEIPs", CtxType.IntArrayData) - ck.set("env.enableCreate", CtxType.BoolData) - ck.set("env.enableCall", CtxType.BoolData) - ck.set("env.allowUnprotectedTxs", CtxType.BoolData) - ck.set("env.chain.chainId", CtxType.UintData) - ck.set("env.chain.homesteadBlock", CtxType.UintData) - ck.set("env.chain.daoForkBlock", CtxType.UintData) - ck.set("env.chain.daoForkSupport", CtxType.BoolData) - ck.set("env.chain.eip150Block", CtxType.UintData) - ck.set("env.chain.eip155Block", CtxType.UintData) - ck.set("env.chain.eip158Block", CtxType.UintData) - ck.set("env.chain.byzantiumBlock", CtxType.UintData) - ck.set("env.chain.constantinopleBlock", CtxType.UintData) - ck.set("env.chain.petersburgBlock", CtxType.UintData) - ck.set("env.chain.istanbulBlock", CtxType.UintData) - ck.set("env.chain.muirGlacierBlock", CtxType.UintData) - ck.set("env.chain.berlinBlock", CtxType.UintData) - ck.set("env.chain.londonBlock", CtxType.UintData) - ck.set("env.chain.arrowGlacierBlock", CtxType.UintData) - ck.set("env.chain.grayGlacierBlock", CtxType.UintData) - ck.set("env.chain.mergeNetSplitBlock", CtxType.UintData) - ck.set("env.chain.shanghaiTime", CtxType.UintData) - ck.set("env.chain.cancunTime", CtxType.UintData) - ck.set("env.chain.pragueTime", CtxType.UintData) - ck.set("env.consensusParams.block.maxGas", CtxType.IntData) - ck.set("env.consensusParams.block.maxBytes", CtxType.IntData) - ck.set("env.consensusParams.evidence.maxAgeDuration", CtxType.IntData) - ck.set("env.consensusParams.evidence.maxAgeNumBlocks", CtxType.IntData) - ck.set("env.consensusParams.evidence.maxBytes", CtxType.IntData) - ck.set("env.consensusParams.validator.pubKeyTypes", CtxType.StringArrayData) - ck.set("env.consensusParams.appVersion", CtxType.UintData) - ck.set("tx.type", CtxType.UintData) + ck.set('isCall', CtxType.BoolData); + ck.set('block.header.parentHash', CtxType.BytesData); + ck.set('block.header.miner', CtxType.BytesData); + ck.set('block.header.transactionsRoot', CtxType.BytesData); + ck.set('block.header.number', CtxType.UintData); + ck.set('block.header.timestamp', CtxType.UintData); + ck.set('env.extraEIPs', CtxType.IntArrayData); + ck.set('env.enableCreate', CtxType.BoolData); + ck.set('env.enableCall', CtxType.BoolData); + ck.set('env.allowUnprotectedTxs', CtxType.BoolData); + ck.set('env.chain.chainId', CtxType.UintData); + ck.set('env.chain.homesteadBlock', CtxType.UintData); + ck.set('env.chain.daoForkBlock', CtxType.UintData); + ck.set('env.chain.daoForkSupport', CtxType.BoolData); + ck.set('env.chain.eip150Block', CtxType.UintData); + ck.set('env.chain.eip155Block', CtxType.UintData); + ck.set('env.chain.eip158Block', CtxType.UintData); + ck.set('env.chain.byzantiumBlock', CtxType.UintData); + ck.set('env.chain.constantinopleBlock', CtxType.UintData); + ck.set('env.chain.petersburgBlock', CtxType.UintData); + ck.set('env.chain.istanbulBlock', CtxType.UintData); + ck.set('env.chain.muirGlacierBlock', CtxType.UintData); + ck.set('env.chain.berlinBlock', CtxType.UintData); + ck.set('env.chain.londonBlock', CtxType.UintData); + ck.set('env.chain.arrowGlacierBlock', CtxType.UintData); + ck.set('env.chain.grayGlacierBlock', CtxType.UintData); + ck.set('env.chain.mergeNetSplitBlock', CtxType.UintData); + ck.set('env.chain.shanghaiTime', CtxType.UintData); + ck.set('env.chain.cancunTime', CtxType.UintData); + ck.set('env.chain.pragueTime', CtxType.UintData); + ck.set('env.consensusParams.block.maxGas', CtxType.IntData); + ck.set('env.consensusParams.block.maxBytes', CtxType.IntData); + ck.set('env.consensusParams.evidence.maxAgeDuration', CtxType.IntData); + ck.set('env.consensusParams.evidence.maxAgeNumBlocks', CtxType.IntData); + ck.set('env.consensusParams.evidence.maxBytes', CtxType.IntData); + ck.set('env.consensusParams.validator.pubKeyTypes', CtxType.StringArrayData); + ck.set('env.consensusParams.appVersion', CtxType.UintData); + ck.set('tx.type', CtxType.UintData); - // All join points can't access. - ck.set("tx.chainId", CtxType.BytesData) + ck.set('tx.chainId', CtxType.BytesData); + ck.set('tx.accessList', CtxType.EthAccessList); + ck.set('tx.nonce', CtxType.UintData); + ck.set('tx.gasPrice', CtxType.BytesData); + ck.set('tx.gas', CtxType.UintData); + ck.set('tx.gasTipCap', CtxType.BytesData); + ck.set('tx.gasFeeCap', CtxType.BytesData); + ck.set('tx.to', CtxType.BytesData); + ck.set('tx.value', CtxType.BytesData); + ck.set('tx.data', CtxType.BytesData); + ck.set('tx.bytes', CtxType.BytesData); + ck.set('tx.hash', CtxType.BytesData); + ck.set('tx.unsigned.bytes', CtxType.BytesData); + ck.set('tx.unsigned.hash', CtxType.BytesData); + ck.set('tx.sig.v', CtxType.BytesData); + ck.set('tx.sig.r', CtxType.BytesData); + ck.set('tx.sig.s', CtxType.BytesData); + ck.set('tx.from', CtxType.BytesData); + ck.set('tx.index', CtxType.UintData); + ck.set('aspect.id', CtxType.BytesData); + ck.set('aspect.version', CtxType.UintData); + ck.set('msg.from', CtxType.BytesData); + ck.set('msg.to', CtxType.BytesData); + ck.set('msg.value', CtxType.BytesData); + ck.set('msg.gas', CtxType.UintData); + ck.set('msg.input', CtxType.BytesData); + ck.set('msg.index', CtxType.UintData); + ck.set('msg.result.ret', CtxType.BytesData); + ck.set('msg.result.gasUsed', CtxType.UintData); + ck.set('msg.result.error', CtxType.StringData); + ck.set('receipt.status', CtxType.UintData); + ck.set('receipt.logs', CtxType.EthLogs); + ck.set('receipt.gasUsed', CtxType.UintData); + ck.set('receipt.cumulativeGasUsed', CtxType.UintData); + ck.set('receipt.bloom', CtxType.BytesData); - ck.set("tx.accessList", CtxType.EthAccessList) - ck.set("tx.nonce", CtxType.UintData) - ck.set("tx.gasPrice", CtxType.BytesData) - ck.set("tx.gas", CtxType.UintData) - ck.set("tx.gasTipCap", CtxType.BytesData) - ck.set("tx.gasFeeCap", CtxType.BytesData) - ck.set("tx.to", CtxType.BytesData) - ck.set("tx.value", CtxType.BytesData) - ck.set("tx.data", CtxType.BytesData) - ck.set("tx.bytes", CtxType.BytesData) - ck.set("tx.hash", CtxType.BytesData) - ck.set("tx.unsigned.bytes", CtxType.BytesData) - ck.set("tx.unsigned.hash", CtxType.BytesData) - ck.set("tx.sig.v", CtxType.BytesData) - ck.set("tx.sig.r", CtxType.BytesData) - ck.set("tx.sig.s", CtxType.BytesData) - ck.set("tx.from", CtxType.BytesData) - ck.set("tx.index", CtxType.UintData) - ck.set("aspect.id", CtxType.BytesData) - ck.set("aspect.version", CtxType.UintData) - ck.set("msg.from", CtxType.BytesData) - ck.set("msg.to", CtxType.BytesData) - ck.set("msg.value", CtxType.BytesData) - ck.set("msg.gas", CtxType.UintData) - ck.set("msg.input", CtxType.BytesData) - ck.set("msg.index", CtxType.UintData) - ck.set("msg.result.ret", CtxType.BytesData) - ck.set("msg.result.gasUsed", CtxType.UintData) - ck.set("msg.result.error", CtxType.StringData) - ck.set("receipt.status", CtxType.UintData) - ck.set("receipt.logs", CtxType.EthLogs) - ck.set("receipt.gasUsed", CtxType.UintData) - ck.set("receipt.cumulativeGasUsed", CtxType.UintData) - ck.set("receipt.bloom", CtxType.BytesData) - - return ck + return ck; } +class ContextPermissionCheck + implements + IAspectOperation, + IPostTxExecuteJP, + IPreTxExecuteJP, + IPostContractCallJP, + IPreContractCallJP, + ITransactionVerifier +{ + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get('owner'); + return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); + } -class ContextPermissionCheck implements IAspectOperation,IPostTxExecuteJP, IPreTxExecuteJP, IPostContractCallJP, IPreContractCallJP, ITransactionVerifier { - - isOwner(sender: Uint8Array): bool { - const value = sys.aspect.property.get("owner"); - return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); - } + init(input: InitInput): void {} - operation(input: OperationInput): Uint8Array { - const logPrefix = "operation"; - const key= uint8ArrayToString(input.callData); - const allKeys = newAllKeys(); - const ctxType = allKeys.get(key); - if (ctxType) { - const context = getContext(ctxType, key); - sys.require(context==null,logPrefix+key+" should be null"); - } - return stringToUint8Array('test'); + operation(input: OperationInput): Uint8Array { + const logPrefix = 'operation'; + const key = uint8ArrayToString(input.callData); + const allKeys = newAllKeys(); + const ctxType = allKeys.get(key); + if (ctxType) { + const context = getContext(ctxType, key); + sys.require(context == null, logPrefix + key + ' should be null'); } + return stringToUint8Array('test'); + } - /** - * All clear - * @param input - * @returns - */ - verifyTx(input: TxVerifyInput): Uint8Array { - const logPrefix = "verifyTx"; - const txData = sys.hostApi.runtimeContext.get("tx.data") - const bytesData = Protobuf.decode(txData, BytesData.decode); - const key = decodeStringFromABI(bytesData.data); - const allKeys = newAllKeys(); - const ctxType = allKeys.get(key); - if (ctxType) { - sys.log(logPrefix + " get key: " + key) - // here be painc - const context = getContext(ctxType, key); - sys.require(context==null,logPrefix+key+" should be null"); - } - return sys.aspect.property.get("Broker"); + /** + * All clear + * @param input + * @returns + */ + verifyTx(input: TxVerifyInput): Uint8Array { + const logPrefix = 'verifyTx'; + const txData = sys.hostApi.runtimeContext.get('tx.data'); + const bytesData = Protobuf.decode(txData, BytesData.decode); + const key = decodeStringFromABI(bytesData.data); + const allKeys = newAllKeys(); + const ctxType = allKeys.get(key); + if (ctxType) { + sys.log(logPrefix + ' get key: ' + key); + // here be painc + const context = getContext(ctxType, key); + sys.require(context == null, logPrefix + key + ' should be null'); } + return sys.aspect.property.get('Broker'); + } - - /** - * All clear - * @param input - */ - preTxExecute(input: PreTxExecuteInput): void { - const logPrefix = "preTxExecute"; - const txData = sys.hostApi.runtimeContext.get("tx.data") - const bytesData = Protobuf.decode(txData, BytesData.decode); - const key = decodeStringFromABI(bytesData.data); - const allKeys = newAllKeys(); - const ctxType = allKeys.get(key); - if (ctxType) { - const context = getContext(ctxType, key); - sys.require(context==null,logPrefix+key+" should be null"); - - } + /** + * All clear + * @param input + */ + preTxExecute(input: PreTxExecuteInput): void { + const logPrefix = 'preTxExecute'; + const txData = sys.hostApi.runtimeContext.get('tx.data'); + const bytesData = Protobuf.decode(txData, BytesData.decode); + const key = decodeStringFromABI(bytesData.data); + const allKeys = newAllKeys(); + const ctxType = allKeys.get(key); + if (ctxType) { + const context = getContext(ctxType, key); + sys.require(context == null, logPrefix + key + ' should be null'); } + } - /** - * All clear - * @param input - */ - postTxExecute(input: PostTxExecuteInput): void { - - const logPrefix = "postTxExecute"; - const txData = sys.hostApi.runtimeContext.get("tx.data") - const bytesData = Protobuf.decode(txData, BytesData.decode); - const key = decodeStringFromABI(bytesData.data); - const allKeys = newAllKeys(); - const ctxType = allKeys.get(key); - if (ctxType) { - const context = getContext(ctxType, key); - sys.require(context==null,logPrefix+key+" should be null"); - } + /** + * All clear + * @param input + */ + postTxExecute(input: PostTxExecuteInput): void { + const logPrefix = 'postTxExecute'; + const txData = sys.hostApi.runtimeContext.get('tx.data'); + const bytesData = Protobuf.decode(txData, BytesData.decode); + const key = decodeStringFromABI(bytesData.data); + const allKeys = newAllKeys(); + const ctxType = allKeys.get(key); + if (ctxType) { + const context = getContext(ctxType, key); + sys.require(context == null, logPrefix + key + ' should be null'); } + } - /** - * All clear - * @param input - */ - postContractCall(input: PostContractCallInput): void { - - const logPrefix = "postContractCall "; - const txData = sys.hostApi.runtimeContext.get("tx.data") - const bytesData = Protobuf.decode(txData, BytesData.decode); - const key = decodeStringFromABI(bytesData.data); - const allKeys = newAllKeys(); - const ctxType = allKeys.get(key); - if (ctxType) { - sys.log(logPrefix + " get key: " + key) - const context = getContext(ctxType, key); - sys.require(context==null,logPrefix+key+" should be null"); - } + /** + * All clear + * @param input + */ + postContractCall(input: PostContractCallInput): void { + const logPrefix = 'postContractCall '; + const txData = sys.hostApi.runtimeContext.get('tx.data'); + const bytesData = Protobuf.decode(txData, BytesData.decode); + const key = decodeStringFromABI(bytesData.data); + const allKeys = newAllKeys(); + const ctxType = allKeys.get(key); + if (ctxType) { + sys.log(logPrefix + ' get key: ' + key); + const context = getContext(ctxType, key); + sys.require(context == null, logPrefix + key + ' should be null'); } + } - /** - * All clear - * @param input - */ - preContractCall(input: PreContractCallInput): void { - - const logPrefix = "||| preContractCall "; - const txData = sys.hostApi.runtimeContext.get("tx.data") - const bytesData = Protobuf.decode(txData, BytesData.decode); - const key = decodeStringFromABI(bytesData.data); - const allKeys = newAllKeys(); - const ctxType = allKeys.get(key); - if (ctxType) { - const context = getContext(ctxType, key); - sys.require(context==null,logPrefix+key+" should be null"); - } + /** + * All clear + * @param input + */ + preContractCall(input: PreContractCallInput): void { + const logPrefix = '||| preContractCall '; + const txData = sys.hostApi.runtimeContext.get('tx.data'); + const bytesData = Protobuf.decode(txData, BytesData.decode); + const key = decodeStringFromABI(bytesData.data); + const allKeys = newAllKeys(); + const ctxType = allKeys.get(key); + if (ctxType) { + const context = getContext(ctxType, key); + sys.require(context == null, logPrefix + key + ' should be null'); } - - + } } // 2.register aspect Instance -const aspect = new ContextPermissionCheck() -entryPoint.setAspect(aspect) -entryPoint.setOperationAspect(aspect) +const aspect = new ContextPermissionCheck(); +entryPoint.setAspect(aspect); +entryPoint.setOperationAspect(aspect); // 3.must export it -export {allocate, execute}; +export { allocate, execute }; diff --git a/packages/testcases/aspect/context-permission-check.ts b/packages/testcases/aspect/context-permission-check.ts index 34ad38d..c9f8d21 100644 --- a/packages/testcases/aspect/context-permission-check.ts +++ b/packages/testcases/aspect/context-permission-check.ts @@ -8,6 +8,7 @@ import { EthLog, EthLogs, execute, IAspectOperation, + InitInput, IntArrayData, IntData, IPostContractCallJP, @@ -210,6 +211,8 @@ function newAllKeys(): Map { } class ContextPermissionCheck implements IAspectOperation, IPostTxExecuteJP, IPreTxExecuteJP, IPostContractCallJP, IPreContractCallJP, ITransactionVerifier { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get("owner"); @@ -219,11 +222,6 @@ class ContextPermissionCheck implements IAspectOperation, IPostTxExecuteJP, IPre operation(input: OperationInput): Uint8Array { const logPrefix = "operation"; const skipKey = new Set() - skipKey.add("msg.from"); - skipKey.add("msg.to"); - skipKey.add("msg.value"); - skipKey.add("msg.gas"); - skipKey.add("msg.input"); skipKey.add("msg.index"); skipKey.add("msg.result.ret"); skipKey.add("msg.result.gasUsed"); diff --git a/packages/testcases/aspect/contract-aspect.ts b/packages/testcases/aspect/contract-aspect.ts index de5bab4..54a3b40 100644 --- a/packages/testcases/aspect/contract-aspect.ts +++ b/packages/testcases/aspect/contract-aspect.ts @@ -2,6 +2,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, PostTxExecuteInput, @@ -13,6 +14,8 @@ import { class StoreAspect implements IPostTxExecuteJP, IPreTxExecuteJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { return true } diff --git a/packages/testcases/aspect/cross-phase-property.ts b/packages/testcases/aspect/cross-phase-property.ts index 093f677..e9c29b7 100644 --- a/packages/testcases/aspect/cross-phase-property.ts +++ b/packages/testcases/aspect/cross-phase-property.ts @@ -2,6 +2,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, ITransactionVerifier, @@ -21,6 +22,8 @@ class CrossPhaseProperty implements IPostTxExecuteJP, IPreTxExecuteJP, ITransact propFromPreTxExecute: string = `${this.stateKeyPrefix}_preTxExecute`; propFromPostTxExecute: string = `${this.stateKeyPrefix}_postTxExecute`; + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return !!uint8ArrayToHex(value).includes(uint8ArrayToString(sender)); diff --git a/packages/testcases/aspect/cross-phase-state.ts b/packages/testcases/aspect/cross-phase-state.ts index d40942a..1113b7a 100644 --- a/packages/testcases/aspect/cross-phase-state.ts +++ b/packages/testcases/aspect/cross-phase-state.ts @@ -2,6 +2,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, PostTxExecuteInput, @@ -14,6 +15,8 @@ import { keyForTest: string = 'key_for_cross_consensus_phase_state_test'; valueForTest: string = 'value for test'; + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return !!uint8ArrayToHex(value).includes(uint8ArrayToString(sender)); diff --git a/packages/testcases/aspect/crypto-ecrecover-aspect.ts b/packages/testcases/aspect/crypto-ecrecover-aspect.ts index 2bbac72..83b4b03 100644 --- a/packages/testcases/aspect/crypto-ecrecover-aspect.ts +++ b/packages/testcases/aspect/crypto-ecrecover-aspect.ts @@ -7,12 +7,15 @@ import { execute, hexToUint8Array, IAspectOperation, + InitInput, OperationInput, sys, uint8ArrayToHex, } from '@artela/aspect-libs'; class AspectTest implements IAspectOperation { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { return true; } diff --git a/packages/testcases/aspect/crypto-hash-aspect.ts b/packages/testcases/aspect/crypto-hash-aspect.ts index 027dd9e..21822d1 100644 --- a/packages/testcases/aspect/crypto-hash-aspect.ts +++ b/packages/testcases/aspect/crypto-hash-aspect.ts @@ -5,6 +5,7 @@ import { entryPoint, execute, IAspectOperation, + InitInput, OperationInput, stringToUint8Array, sys, @@ -12,6 +13,8 @@ import { } from '@artela/aspect-libs'; class AspectTest implements IAspectOperation { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { return true; } diff --git a/packages/testcases/aspect/float.ts b/packages/testcases/aspect/float.ts new file mode 100644 index 0000000..5c898b3 --- /dev/null +++ b/packages/testcases/aspect/float.ts @@ -0,0 +1,35 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + OperationInput, + stringToUint8Array, + } from '@artela/aspect-libs'; + + // Float aspect contain float related operations, this should fail during code validation. + class FloatAspect implements + IAspectOperation { + init(input: InitInput): void {} + + isOwner(sender: Uint8Array): bool { + return false; + } + + operation(input: OperationInput): Uint8Array { + const num = 1.1; + return stringToUint8Array(num.toString(10)); + } + } + + // 2.register aspect Instance + const aspect = new FloatAspect(); + entryPoint.setOperationAspect(aspect); + entryPoint.setAspect(aspect); + + // 3.must export it + export { execute, allocate }; + \ No newline at end of file diff --git a/packages/testcases/aspect/goplus/Intercept-large-tx.ts b/packages/testcases/aspect/goplus/Intercept-large-tx.ts index 8a305cf..6bd362e 100644 --- a/packages/testcases/aspect/goplus/Intercept-large-tx.ts +++ b/packages/testcases/aspect/goplus/Intercept-large-tx.ts @@ -4,6 +4,7 @@ import { allocate, BigInt, entryPoint, execute, fromUint8Array, + InitInput, IPreContractCallJP, PreContractCallInput, sys, @@ -26,6 +27,7 @@ class GuardPoolAspect implements IPreContractCallJP { sys.revert('revert'); } } + init(input: InitInput): void {} } diff --git a/packages/testcases/aspect/guard-by-count.ts b/packages/testcases/aspect/guard-by-count.ts index e50efac..31808e9 100644 --- a/packages/testcases/aspect/guard-by-count.ts +++ b/packages/testcases/aspect/guard-by-count.ts @@ -5,6 +5,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostContractCallJP, IPreContractCallJP, PostContractCallInput, @@ -15,6 +16,8 @@ import { } from '@artela/aspect-libs'; class GuardByCountAspect implements IPostContractCallJP, IPreContractCallJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); diff --git a/packages/testcases/aspect/guard-by-lock.ts b/packages/testcases/aspect/guard-by-lock.ts index 51e6a46..b869f29 100644 --- a/packages/testcases/aspect/guard-by-lock.ts +++ b/packages/testcases/aspect/guard-by-lock.ts @@ -4,6 +4,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostContractCallJP, IPreContractCallJP, PostContractCallInput, @@ -13,7 +14,9 @@ import { uint8ArrayToString, } from '@artela/aspect-libs'; -class GuardByCountAspect implements IPostContractCallJP, IPreContractCallJP { +class GuardByLockAspect implements IPostContractCallJP, IPreContractCallJP { + init(input: InitInput): void { } + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); @@ -46,7 +49,7 @@ class GuardByCountAspect implements IPostContractCallJP, IPreContractCallJP { } // 2.register aspect Instance -const aspect = new GuardByCountAspect(); +const aspect = new GuardByLockAspect(); entryPoint.setAspect(aspect); // 3.must export it diff --git a/packages/testcases/aspect/guard-by-trace.ts b/packages/testcases/aspect/guard-by-trace.ts index 3495eb5..262cd1e 100644 --- a/packages/testcases/aspect/guard-by-trace.ts +++ b/packages/testcases/aspect/guard-by-trace.ts @@ -5,6 +5,7 @@ import { BigInt, entryPoint, execute, + InitInput, IPostContractCallJP, PostContractCallInput, sys, @@ -13,6 +14,8 @@ import { import { HoneyPotState } from './contract/honeypot-storage'; class GuardBTraceAspect implements IPostContractCallJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); diff --git a/packages/testcases/aspect/hostapi-crypto.ts b/packages/testcases/aspect/hostapi-crypto.ts new file mode 100644 index 0000000..665aa80 --- /dev/null +++ b/packages/testcases/aspect/hostapi-crypto.ts @@ -0,0 +1,437 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + ITransactionVerifier, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + TxVerifyInput, + sys, + uint8ArrayToHex, + hexToUint8Array, + Uint256, + G1Point, + G2Point, + stringToUint8Array, +} from '@artela/aspect-libs'; + +class HostApiAspectCrypto implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP, + ITransactionVerifier { + init(input: InitInput): void { } + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + verifyTx(input: TxVerifyInput): Uint8Array { + return sys.aspect.mutableState.get('owner').unwrap(); + } + + operation(input: OperationInput): Uint8Array { + this.test(); + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + this.test(); + } + + postContractCall(_: PostContractCallInput): void { + } + + preTxExecute(input: PreTxExecuteInput): void { + } + + postTxExecute(_: PostTxExecuteInput): void { + } + + test(): void { + const test = uint8ArrayToHex(sys.aspect.property.get("test")); + if (test == "01") { + this.testEcRecover(); + } else if (test == "02") { + this.testBigModExp(); + } else if (test == "03") { + this.testBn256Add(); + } else if (test == "04") { + this.testBn256ScalarMul(); + } else if (test == "05") { + this.testBn256Pairing(); + } else if (test == "06") { + this.testBlake2F(); + } else if (test == "07") { + this.testSha256(); + this.testKeccak(); + this.testRipemd160(); + } + } + + testEcRecover(): void { + sys.log("testcase: testEcRecover"); + { + let hash = Uint256.fromHex("18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c"); + let r = Uint256.fromHex("73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f"); + let s = Uint256.fromHex("eeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549"); + let v = Uint256.fromHex("000000000000000000000000000000000000001000000000000000000000011c"); + let ecRecoverData = sys.hostApi.crypto.ecRecover(hash.toUint8Array(), v, r, s); + this.assert("", uint8ArrayToHex(ecRecoverData), "EcRecover1"); + } + + { + let hash = Uint256.fromHex("18c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c"); + let r = Uint256.fromHex("73b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f"); + let s = Uint256.fromHex("eeb940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549"); + let v = Uint256.fromHex("000000000000000000000000000000000000000000000000000000000000001c"); + let ecRecoverData = sys.hostApi.crypto.ecRecover(hash.toUint8Array(), v, r, s); + this.assert("000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", uint8ArrayToHex(ecRecoverData), "EcRecover2"); + } + } + + testBigModExp(): void { + sys.log("testcase: testBigModExp"); + { + let base = hexToUint8Array("03") + let exp = hexToUint8Array("fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e") + let mod = hexToUint8Array("fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f") + const expect = "0000000000000000000000000000000000000000000000000000000000000001"; + + const bigModExpRet = sys.hostApi.crypto.bigModExp(base, exp, mod) + this.assert(expect, uint8ArrayToHex(bigModExpRet), "BigModExp1"); + } + + { + let base = hexToUint8Array("0") + let exp = hexToUint8Array("fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e") + let mod = hexToUint8Array("fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f") + const expect = "0000000000000000000000000000000000000000000000000000000000000000"; + + const bigModExpRet = sys.hostApi.crypto.bigModExp(base, exp, mod) + this.assert(expect, uint8ArrayToHex(bigModExpRet), "BigModExp2"); + } + + { + let base = hexToUint8Array("e09ad9675465c53a109fac66a445c91b292d2bb2c5268addb30cd82f80fcb0033ff97c80a5fc6f39193ae969c6ede6710a6b7ac27078a06d90ef1c72e5c85fb5") + let exp = hexToUint8Array("02") + let mod = hexToUint8Array("fc9e1f6beb81516545975218075ec2af118cd8798df6e08a147c60fd6095ac2bb02c2908cf4dd7c81f11c289e4bce98f3553768f392a80ce22bf5c4f4a248c6b") + const expect = "60008f1614cc01dcfb6bfb09c625cf90b47d4468db81b5f8b7a39d42f332eab9b2da8f2d95311648a8f243f4bb13cfb3d8f7f2a3c014122ebb3ed41b02783adc"; + + const bigModExpRet = sys.hostApi.crypto.bigModExp(base, exp, mod) + this.assert(expect, uint8ArrayToHex(bigModExpRet), "BigModExp3"); + } + + { + let base = hexToUint8Array("cad7d991a00047dd54d3399b6b0b937c718abddef7917c75b6681f40cc15e2be0003657d8d4c34167b2f0bbbca0ccaa407c2a6a07d50f1517a8f22979ce12a81dcaf707cc0cebfc0ce2ee84ee7f77c38b9281b9822a8d3de62784c089c9b18dcb9a2a5eecbede90ea788a862a9ddd9d609c2c52972d63e289e28f6a590ffbf51") + let exp = hexToUint8Array("02") + let mod = hexToUint8Array("e6d893b80aeed5e6e9ce9afa8a5d5675c93a32ac05554cb20e9951b2c140e3ef4e433068cf0fb73bc9f33af1853f64aa27a0028cbf570d7ac9048eae5dc7b28c87c31e5810f1e7fa2cda6adf9f1076dbc1ec1238560071e7efc4e9565c49be9e7656951985860a558a754594115830bcdb421f741408346dd5997bb01c287087") + const expect = "981dd99c3b113fae3e3eaa9435c0dc96779a23c12a53d1084b4f67b0b053a27560f627b873e3f16ad78f28c94f14b6392def26e4d8896c5e3c984e50fa0b3aa44f1da78b913187c6128baa9340b1e9c9a0fd02cb78885e72576da4a8f7e5a113e173a7a2889fde9d407bd9f06eb05bc8fc7b4229377a32941a02bf4edcc06d70"; + + const bigModExpRet = sys.hostApi.crypto.bigModExp(base, exp, mod) + this.assert(expect, uint8ArrayToHex(bigModExpRet), "BigModExp4"); + } + + { + let base = hexToUint8Array("c5a1611f8be90071a43db23cc2fe01871cc4c0e8ab5743f6378e4fef77f7f6db0095c0727e20225beb665645403453e325ad5f9aeb9ba99bf3c148f63f9c07cf4fe8847ad5242d6b7d4499f93bd47056ddab8f7dee878fc2314f344dbee2a7c41a5d3db91eff372c730c2fdd3a141a4b61999e36d549b9870cf2f4e632c4d5df5f024f81c028000073a0ed8847cfb0593d36a47142f578f05ccbe28c0c06aeb1b1da027794c48db880278f79ba78ae64eedfea3c07d10e0562668d839749dc95f40467d15cf65b9cfc52c7c4bcef1cda3596dd52631aac942f146c7cebd46065131699ce8385b0db1874336747ee020a5698a3d1a1082665721e769567f579830f9d259cec1a836845109c21cf6b25da572512bf3c42fd4b96e43895589042ab60dd41f497db96aec102087fe784165bb45f942859268fd2ff6c012d9d00c02ba83eace047cc5f7b2c392c2955c58a49f0338d6fc58749c9db2155522ac17914ec216ad87f12e0ee95574613942fa615898c4d9e8a3be68cd6afa4e7a003dedbdf8edfee31162b174f965b20ae752ad89c967b3068b6f722c16b354456ba8e280f987c08e0a52d40a2e8f3a59b94d590aeef01879eb7a90b3ee7d772c839c85519cbeaddc0c193ec4874a463b53fcaea3271d80ebfb39b33489365fc039ae549a17a9ff898eea2f4cb27b8dbee4c17b998438575b2b8d107e4a0d66ba7fca85b41a58a8d51f191a35c856dfbe8aef2b00048a694bbccff832d23c8ca7a7ff0b6c0b3011d00b97c86c0628444d267c951d9e4fb8f83e154b8f74fb51aa16535e498235c5597dac9606ed0be3173a3836baa4e7d756ffe1e2879b415d3846bccd538c05b847785699aefde3e305decb600cd8fb0e7d8de5efc26971a6ad4e6d7a2d91474f1023a0ac4b78dc937da0ce607a45974d2cac1c33a2631ff7fe6144a3b2e5cf98b531a9627dea92c1dc82204d09db0439b6a11dd64b484e1263aa45fd9539b6020b55e3baece3986a8bffc1003406348f5c61265099ed43a766ee4f93f5f9c5abbc32a0fd3ac2b35b87f9ec26037d88275bd7dd0a54474995ee34ed3727f3f97c48db544b1980193a4b76a8a3ddab3591ce527f16d91882e67f0103b5cda53f7da54d489fc4ac08b6ab358a5a04aa9daa16219d50bd672a7cb804ed769d218807544e5993f1c27427104b349906a0b654df0bf69328afd3013fbe430155339c39f236df5557bf92f1ded7ff609a8502f49064ec3d1dbfb6c15d3a4c11a4f8acd12278cbf68acd5709463d12e3338a6eddb8c112f199645e23154a8e60879d2a654e3ed9296aa28f134168619691cd2c6b9e2eba4438381676173fc63c2588a3c5910dc149cf3760f0aa9fa9c3f5faa9162b0bf1aac9dd32b706a60ef53cbdb394b6b40222b5bc80eea82ba8958386672564cae3794f977871ab62337cf") + let exp = hexToUint8Array("010001") + let mod = hexToUint8Array("e30049201ec12937e7ce79d0f55d9c810e20acf52212aca1d3888949e0e4830aad88d804161230eb89d4d329cc83570fe257217d2119134048dd2ed167646975fc7d77136919a049ea74cf08ddd2b896890bb24a0ba18094a22baa351bf29ad96c66bbb1a598f2ca391749620e62d61c3561a7d3653ccc8892c7b99baaf76bf836e2991cb06d6bc0514568ff0d1ec8bb4b3d6984f5eaefb17d3ea2893722375d3ddb8e389a8eef7d7d198f8e687d6a513983df906099f9a2d23f4f9dec6f8ef2f11fc0a21fac45353b94e00486f5e17d386af42502d09db33cf0cf28310e049c07e88682aeeb00cb833c5174266e62407a57583f1f88b304b7c6e0c84bbe1c0fd423072d37a5bd0aacf764229e5c7cd02473460ba3645cd8e8ae144065bf02d0dd238593d8e230354f67e0b2f23012c23274f80e3ee31e35e2606a4a3f31d94ab755e6d163cff52cbb36b6d0cc67ffc512aeed1dce4d7a0d70ce82f2baba12e8d514dc92a056f994adfb17b5b9712bd5186f27a2fda1f7039c5df2c8587fdc62f5627580c13234b55be4df3056050e2d1ef3218f0dd66cb05265fe1acfb0989d8213f2c19d1735a7cf3fa65d88dad5af52dc2bba22b7abf46c3bc77b5091baab9e8f0ddc4d5e581037de91a9f8dcbc69309be29cc815cf19a20a7585b8b3073edf51fc9baeb3e509b97fa4ecfd621e0fd57bd61cac1b895c03248ff12bdbc57509250df3517e8a3fe1d776836b34ab352b973d932ef708b14f7418f9eceb1d87667e61e3e758649cb083f01b133d37ab2f5afa96d6c84bcacf4efc3851ad308c1e7d9113624fce29fab460ab9d2a48d92cdb281103a5250ad44cb2ff6e67ac670c02fdafb3e0f1353953d6d7d5646ca1568dea55275a050ec501b7c6250444f7219f1ba7521ba3b93d089727ca5f3bbe0d6c1300b423377004954c5628fdb65770b18ced5c9b23a4a5a6d6ef25fe01b4ce278de0bcc4ed86e28a0a68818ffa40970128cf2c38740e80037984428c1bd5113f40ff47512ee6f4e4d8f9b8e8e1b3040d2928d003bd1c1329dc885302fbce9fa81c23b4dc49c7c82d29b52957847898676c89aa5d32b5b0e1c0d5a2b79a19d67562f407f19425687971a957375879d90c5f57c857136c17106c9ab1b99d80e69c8c954ed386493368884b55c939b8d64d26f643e800c56f90c01079d7c534e3b2b7ae352cefd3016da55f6a85eb803b85e2304915fd2001f77c74e28746293c46e4f5f0fd49cf988aafd0026b8e7a3bab2da5cdce1ea26c2e29ec03f4807fac432662b2d6c060be1c7be0e5489de69d0a6e03a4b9117f9244b34a0f1ecba89884f781c6320412413a00c4980287409a2a78c2cd7e65cecebbe4ec1c28cac4dd95f6998e78fc6f1392384331c9436aa10e10e2bf8ad2c4eafbcf276aa7bae64b74428911b3269c749338b0fc5075ad") + const expect = "5a0eb2bdf0ac1cae8e586689fa16cd4b07dfdedaec8a110ea1fdb059dd5253231b6132987598dfc6e11f86780428982d50cf68f67ae452622c3b336b537ef3298ca645e8f89ee39a26758206a5a3f6409afc709582f95274b57b71fae5c6b74619ae6f089a5393c5b79235d9caf699d23d88fb873f78379690ad8405e34c19f5257d596580c7a6a7206a3712825afe630c76b31cdb4a23e7f0632e10f14f4e282c81a66451a26f8df2a352b5b9f607a7198449d1b926e27036810368e691a74b91c61afa73d9d3b99453e7c8b50fd4f09c039a2f2feb5c419206694c31b92df1d9586140cb3417b38d0c503c7b508cc2ed12e813a1c795e9829eb39ee78eeaf360a169b491a1d4e419574e712402de9d48d54c1ae5e03739b7156615e8267e1fb0a897f067afd11fb33f6e24182d7aaaaa18fe5bc1982f20d6b871e5a398f0f6f718181d31ec225cfa9a0a70124ed9a70031bdf0c1c7829f708b6e17d50419ef361cf77d99c85f44607186c8d683106b8bd38a49b5d0fb503b397a83388c5678dcfcc737499d84512690701ed621a6f0172aecf037184ddf0f2453e4053024018e5ab2e30d6d5363b56e8b41509317c99042f517247474ab3abc848e00a07f69c254f46f2a05cf6ed84e5cc906a518fdcfdf2c61ce731f24c5264f1a25fc04934dc28aec112134dd523f70115074ca34e3807aa4cb925147f3a0ce152d323bd8c675ace446d0fd1ae30c4b57f0eb2c23884bc18f0964c0114796c5b6d080c3d89175665fbf63a6381a6a9da39ad070b645c8bb1779506da14439a9f5b5d481954764ea114fac688930bc68534d403cff4210673b6a6ff7ae416b7cd41404c3d3f282fcd193b86d0f54d0006c2a503b40d5c3930da980565b8f9630e9493a79d1c03e74e5f93ac8e4dc1a901ec5e3b3e57049124c7b72ea345aa359e782285d9e6a5c144a378111dd02c40855ff9c2be9b48425cb0b2fd62dc8678fd151121cf26a65e917d65d8e0dacfae108eb5508b601fb8ffa370be1f9a8b749a2d12eeab81f41079de87e2d777994fa4d28188c579ad327f9957fb7bdecec5c680844dd43cb57cf87aeb763c003e65011f73f8c63442df39a92b946a6bd968a1c1e4d5fa7d88476a68bd8e20e5b70a99259c7d3f85fb1b65cd2e93972e6264e74ebf289b8b6979b9b68a85cd5b360c1987f87235c3c845d62489e33acf85d53fa3561fe3a3aee18924588d9c6eba4edb7a4d106b31173e42929f6f0c48c80ce6a72d54eca7c0fe870068b7a7c89c63cdda593f5b32d3cb4ea8a32c39f00ab449155757172d66763ed9527019d6de6c9f2416aa6203f4d11c9ebee1e1d3845099e55504446448027212616167eb36035726daa7698b075286f5379cd3e93cb3e0cf4f9cb8d017facbb5550ed32d5ec5400ae57e47e2bf78d1eaeff9480cc765ceff39db500"; + + const bigModExpRet = sys.hostApi.crypto.bigModExp(base, exp, mod) + this.assert(expect, uint8ArrayToHex(bigModExpRet), "BigModExp5"); + } + } + + testBn256Add(): void { + sys.log("testcase: testBn256Add"); + { + let ax = Uint256.fromHex("18b18acfb4c2c30276db5411368e7185b311dd124691610c5d3b74034e093dc9"); + let ay = Uint256.fromHex("063c909c4720840cb5134cb9f59fa749755796819658d32efc0d288198f37266"); + let bx = Uint256.fromHex("07c2b7f58a84bd6145f00c9c2bc0bb1a187f20ff2c92963a88019e7c6a014eed"); + let by = Uint256.fromHex("06614e20c147e940f2d70da3f74c9a17df361706a4485c742bd6788478fa17d7"); + let x = new G1Point(ax, ay); + let y = new G1Point(bx, by); + + let expectx = "2243525c5efd4b9c3d3c45ac0ca3fe4dd85e830a4ce6b65fa1eeaee202839703"; + let expecty = "301d1d33be6da8e509df21cc35964723180eed7532537db9ae5e7d48f195c915"; + + const addRet = sys.hostApi.crypto.bn256Add(x, y); + this.assert(expectx, addRet.x.toHex(), "Bn256Add1.x"); + this.assert(expecty, addRet.y.toHex(), "Bn256Add1.y"); + } + + { + let ax = Uint256.fromHex("0000000000000000000000000000000000000000000000000000000000000001"); + let ay = Uint256.fromHex("0000000000000000000000000000000000000000000000000000000000000002"); + let bx = Uint256.fromHex("0000000000000000000000000000000000000000000000000000000000000001"); + let by = Uint256.fromHex("0000000000000000000000000000000000000000000000000000000000000002"); + let x = new G1Point(ax, ay); + let y = new G1Point(bx, by); + + let expectx = "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3"; + let expecty = "15ed738c0e0a7c92e7845f96b2ae9c0a68a6a449e3538fc7ff3ebf7a5a18a2c4"; + + const addRet = sys.hostApi.crypto.bn256Add(x, y); + this.assert(expectx, addRet.x.toHex(), "Bn256Add2.x"); + this.assert(expecty, addRet.y.toHex(), "Bn256Add2.y"); + } + + { + let ax = Uint256.fromHex("17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa9"); + let ay = Uint256.fromHex("01e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c"); + let bx = Uint256.fromHex("17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa9"); + let by = Uint256.fromHex("2e83f8d734803fc370eba25ed1f6b8768bd6d83887b87165fc2434fe11a830cb"); + let x = new G1Point(ax, ay); + let y = new G1Point(bx, by); + + let expectx = "0000000000000000000000000000000000000000000000000000000000000000"; + let expecty = "0000000000000000000000000000000000000000000000000000000000000000"; + + const addRet = sys.hostApi.crypto.bn256Add(x, y); + this.assert(expectx, addRet.x.toHex(), "Bn256Add3.x"); + this.assert(expecty, addRet.y.toHex(), "Bn256Add3.y"); + } + } + + testBn256ScalarMul(): void { + sys.log("testcase: testBn256ScalarMul"); + { + let x = Uint256.fromHex("039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869"); + let y = Uint256.fromHex("073a5ffcc6fc7a28c30723d6e58ce577356982d65b833a5a5c15bf9024b43d98"); + let p = new G1Point(x, y); + let scalar = Uint256.fromHex("30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000"); + + let expectx = "039730ea8dff1254c0fee9c0ea777d29a9c710b7e616683f194f18c43b43b869"; + let expecty = "2929ee761a352600f54921df9bf472e66217e7bb0cee9032e00acc86b3c8bfaf"; + + const addRet = sys.hostApi.crypto.bn256ScalarMul(p, scalar); + this.assert(expectx, addRet.x.toHex(), "Bn256ScalarMul1.x"); + this.assert(expecty, addRet.y.toHex(), "Bn256ScalarMul1.y"); + } + + { + let x = Uint256.fromHex("1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3"); + let y = Uint256.fromHex("1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6"); + let p = new G1Point(x, y); + let scalar = Uint256.fromHex("0000000000000000000000000000000000000000000000000000000000000001"); + + let expectx = "1a87b0584ce92f4593d161480614f2989035225609f08058ccfa3d0f940febe3"; + let expecty = "1a2f3c951f6dadcc7ee9007dff81504b0fcd6d7cf59996efdc33d92bf7f9f8f6"; + + const addRet = sys.hostApi.crypto.bn256ScalarMul(p, scalar); + this.assert(expectx, addRet.x.toHex(), "Bn256ScalarMul2.x"); + this.assert(expecty, addRet.y.toHex(), "Bn256ScalarMul2.y"); + } + + { + let x = Uint256.fromHex("17c139df0efee0f766bc0204762b774362e4ded88953a39ce849a8a7fa163fa9"); + let y = Uint256.fromHex("01e0559bacb160664764a357af8a9fe70baa9258e0b959273ffc5718c6d4cc7c"); + let p = new G1Point(x, y); + let scalar = Uint256.fromHex("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); + + let expectx = "29e587aadd7c06722aabba753017c093f70ba7eb1f1c0104ec0564e7e3e21f60"; + let expecty = "22b1143f6a41008e7755c71c3d00b6b915d386de21783ef590486d8afa8453b1"; + + const addRet = sys.hostApi.crypto.bn256ScalarMul(p, scalar); + this.assert(expectx, addRet.x.toHex(), "Bn256ScalarMul3.x"); + this.assert(expecty, addRet.y.toHex(), "Bn256ScalarMul3.y"); + } + } + + testBn256Pairing(): void { + sys.log("testcase: testBn256Pairing"); + { + + let g1a = new G1Point( + Uint256.fromHex("1c76476f4def4bb94541d57ebba1193381ffa7aa76ada664dd31c16024c43f59"), + Uint256.fromHex("3034dd2920f673e204fee2811c678745fc819b55d3e9d294e45c9b03a76aef41")) + let g2a = new G2Point([ + Uint256.fromHex("209dd15ebff5d46c4bd888e51a93cf99a7329636c63514396b4a452003a35bf7"), + Uint256.fromHex("04bf11ca01483bfa8b34b43561848d28905960114c8ac04049af4b6315a41678"), + ], [ + Uint256.fromHex("2bb8324af6cfc93537a2ad1a445cfd0ca2a71acd7ac41fadbf933c2a51be344d"), + Uint256.fromHex("120a2a4cf30c1bf9845f20c6fe39e07ea2cce61f0c9bb048165fe5e4de877550"), + ]); + + let g1b = new G1Point( + Uint256.fromHex("111e129f1cf1097710d41c4ac70fcdfa5ba2023c6ff1cbeac322de49d1b6df7c"), + Uint256.fromHex("103188585e2364128fe25c70558f1560f4f9350baf3959e603cc91486e110936")) + let g2b = new G2Point([ + Uint256.fromHex("198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2"), + Uint256.fromHex("1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed"), + ], [ + Uint256.fromHex("090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b"), + Uint256.fromHex("12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa"), + ]); + + const cs: Array = []; + cs.push(g1a); + cs.push(g1b); + const ts: Array = []; + ts.push(g2a); + ts.push(g2b); + + let expect = false; + + const addRet = sys.hostApi.crypto.bn256Pairing(cs, ts); + this.assertBool(expect, addRet, "bn256Pairing1"); + } + + { + let strArray: Array = [ + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000002", + "203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79", + "27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9", + "195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152", + "04bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", + "1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", + "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", + "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", + "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000002", + "203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79", + "27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9", + "195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152", + "04bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", + "1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", + "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", + "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", + "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000002", + "203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79", + "27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9", + "195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152", + "04bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", + "1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", + "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", + "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", + "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000002", + "203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79", + "27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9", + "195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152", + "04bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", + "1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", + "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", + "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", + "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000002", + "203e205db4f19b37b60121b83a7333706db86431c6d835849957ed8c3928ad79", + "27dc7234fd11d3e8c36c59277c3e6f149d5cd3cfa9a62aee49f8130962b4b3b9", + "195e8aa5b7827463722b8c153931579d3505566b4edf48d498e185f0509de152", + "04bb53b8977e5f92a0bc372742c4830944a59b4fe6b1c0466e2a6dad122b5d2e", + "030644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd3", + "1a76dae6d3272396d0cbe61fced2bc532edac647851e3ac53ce1cc9c7e645a83", + "198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2", + "1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed", + "090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b", + "12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa", + ] + let cs: Array = []; + let ts: Array = []; + + for (let i = 0; i < strArray.length; i += 6) { + let g1 = new G1Point( + Uint256.fromHex(strArray[i]), + Uint256.fromHex(strArray[i + 1])) + let g2 = new G2Point([ + Uint256.fromHex(strArray[i + 2]), + Uint256.fromHex(strArray[i + 3]), + ], [ + Uint256.fromHex(strArray[i + 4]), + Uint256.fromHex(strArray[i + 5]), + ]); + cs.push(g1); + ts.push(g2); + } + let expect = true; + const addRet = sys.hostApi.crypto.bn256Pairing(cs, ts); + this.assertBool(expect, addRet, "bn256Pairing2"); + } + } + + testBlake2F(): void { + sys.log("testcase: testBlake2F"); + { + let h: Uint8Array = hexToUint8Array("48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa5d182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b"); + let m: Uint8Array = hexToUint8Array("6162630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); + let t: Uint8Array = hexToUint8Array("03000000000000000000000000000000"); + let final: bool = false; + let rounds: Uint8Array = hexToUint8Array("0000000c"); + let expect = "75ab69d3190a562c51aef8d88f1c2775876944407270c42c9844252c26d2875298743e7f6d5ea2f2d3e8d226039cd31b4e426ac4f2d3d666a610c2116fde4735"; + const addRet = sys.hostApi.crypto.blake2F(h, m, t, final, rounds); + this.assert(expect, uint8ArrayToHex(addRet)); + } + } + + testSha256(): void { + sys.log("testcase: testSha256"); + const input = "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"; + const expect = "811c7003375852fabd0d362e40e68607a12bdabae61a7d068fe5fdd1dbbf2a5d"; + const ret = sys.hostApi.crypto.sha256(hexToUint8Array(input)); + this.assert(expect, uint8ArrayToHex(ret), "Sha256"); + } + + testRipemd160(): void { + sys.log("testcase: testRipemd160"); + const input = "38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e000000000000000000000000000000000000000000000000000000000000001b38d18acb67d25c8bb9942764b62f18e17054f66a817bd4295423adf9ed98873e789d1dd423d25f0772d2748d60f7e4b81bb14d086eba8e8e8efb6dcff8a4ae02"; + const expect = "0000000000000000000000009215b8d9882ff46f0dfde6684d78e831467f65e6"; + const ret = sys.hostApi.crypto.ripemd160(hexToUint8Array(input)); + this.assert(expect, uint8ArrayToHex(ret), "Ripemd160"); + } + + testKeccak(): void { + sys.log("testcase: testKeccak"); + const input = stringToUint8Array("abc"); + const expect = "4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45"; + const ret = sys.hostApi.crypto.keccak(input); + this.assert(expect, uint8ArrayToHex(ret), "Keccak"); + } + + assertBool(expect: bool, actual: bool, name: string = ""): void { + this.assert(expect ? "true" : "false", actual ? "true" : "false", name); + } + + assert(expect: string, actual: string, name: string = ""): void { + if (expect != actual) { + let msg = name + ": aspect assert failed, expect " + expect + ", got " + actual; + sys.revert(msg); + return; + } + } +} +// 2.register aspect Instance +const aspect = new HostApiAspectCrypto(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/hostapi.ts b/packages/testcases/aspect/hostapi.ts new file mode 100644 index 0000000..6adf432 --- /dev/null +++ b/packages/testcases/aspect/hostapi.ts @@ -0,0 +1,242 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + ITransactionVerifier, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + TxVerifyInput, + sys, + uint8ArrayToHex, + hexToUint8Array, + Uint256, +} from '@artela/aspect-libs'; + +class HostApiAspect implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP, + ITransactionVerifier { + init(input: InitInput): void { } + + isOwner(sender: Uint8Array): bool { + this.checkPoperty(); + + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + verifyTx(input: TxVerifyInput): Uint8Array { + return sys.aspect.mutableState.get('owner').unwrap(); + } + + operation(input: OperationInput): Uint8Array { + this.checkPoperty(); + this.checkState(true); + this.checkState(false); + + const test = uint8ArrayToHex(sys.aspect.property.get("set")); + const calldata = uint8ArrayToHex(input.callData); + if (calldata == "0001100001") { + this.checkContext(true); + } else { + this.checkContext(false); + } + + this.checkStateDB(3); + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + this.checkPoperty(); + this.checkContext(true); + } + + postContractCall(_: PostContractCallInput): void { + this.checkState(false); + this.checkState(true); + this.checkState(false); + this.checkContext(false); + } + + preTxExecute(input: PreTxExecuteInput): void { + } + + postTxExecute(_: PostTxExecuteInput): void { + } + + checkStateDB(offset: u64): void { + if (!this.checkTest("04")) { + return; + } + + const addr = sys.aspect.property.get("sender"); + + let nonce = sys.hostApi.stateDb.nonce(addr); + let propNonce = u64.parse(uint8ArrayToHex(sys.aspect.property.get("nonce")), 16); + let expectNonce = propNonce + offset; + this.assertStr(expectNonce.toString(), nonce.toString(), "nonce"); + + const balance = sys.hostApi.stateDb.balance(addr); + const expectBalance = sys.aspect.property.get("balance"); + this.checkDiffs(Uint256.fromHex(uint8ArrayToHex(expectBalance)), Uint256.fromHex(uint8ArrayToHex(balance))); + + const codeSize = sys.hostApi.stateDb.codeSize(addr); + this.assertStr("0", codeSize.toString(), "code size"); + + const emptyCodeHash = "c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470"; + const codeHash = sys.hostApi.stateDb.codeHash(addr); + this.assert(emptyCodeHash, codeHash, "code hash"); + + const hasSuicided = sys.hostApi.stateDb.hasSuicided(addr); + this.assertBool(false, hasSuicided, "hasSuicided"); + + const contractAddr = sys.aspect.property.get("contract"); + const hashKey = sys.aspect.property.get("hashkey"); + + const codeSizeContract = sys.hostApi.stateDb.codeSize(contractAddr); + this.assertBool(true, codeSizeContract.toString() != emptyCodeHash, "codeSizeContract"); + + const codeHashContract = sys.hostApi.stateDb.codeHash(contractAddr); + this.assert(Uint256.ZERO.toHex(), codeHashContract); + + const hasSuicidedContract = sys.hostApi.stateDb.hasSuicided(contractAddr); + this.assertBool(false, hasSuicidedContract); + const state = sys.hostApi.stateDb.stateAt(contractAddr, hashKey); + + sys.require(state.length > 0, 'failed to get state.'); + } + + checkContext(set: bool): void { + if (!this.checkTest("03")) { + return; + } + + if (set) { + this.setContext(); + } else { + this.getContext(); + } + } + + setContext(): void { + const context1 = sys.aspect.transientStorage.get("context"); + context1.set("0xaaaa"); + this.assertStr("0xaaaa", context1.unwrap()); + const context2 = sys.aspect.transientStorage.get("context-u64"); + context2.set(999999999999); + this.assertStr("999999999999", context2.unwrap().toString(), "setContext"); + } + + getContext(): void { + const context1 = sys.aspect.transientStorage.get("context"); + this.assertStr("0xaaaa", context1.unwrap()); + const context2 = sys.aspect.transientStorage.get("context-u64"); + this.assertStr("999999999999", context2.unwrap().toString(), "getContext"); + } + + checkState(set: bool): void { + if (!this.checkTest("02")) { + return; + } + if (set) { + this.setState(); + } else { + this.getState(); + } + } + + setState(): void { + const state1 = sys.aspect.mutableState.get("state"); + state1.set("0x123"); + this.assertStr("0x123", state1.unwrap()); + const state2 = sys.aspect.mutableState.get("state-u64"); + state2.set(999999999999); + this.assertStr("999999999999", state2.unwrap().toString(), "setState-u64"); + } + + getState(): void { + const state1 = sys.aspect.mutableState.get("state"); + this.assertStr("0x123", state1.unwrap()); + const state2 = sys.aspect.mutableState.get("state-u64"); + this.assertStr("999999999999", state2.unwrap().toString(), "getState-u64"); + + const readState = sys.aspect.readonlyState.get("state-u64"); + this.assertStr("999999999999", readState.unwrap().toString(), "getState-u64") + } + + checkPoperty(): void { + if (!this.checkTest("01")) { + return; + } + const testu64 = sys.aspect.property.get("number"); + const testu32 = sys.aspect.property.get("number"); + const testu16 = sys.aspect.property.get("number"); + const testu8 = sys.aspect.property.get("number"); + const testbool = sys.aspect.property.get("number"); + if (testu64 != 1 || testu32 != 1 || testu16 != 1 || testu8 != 1 || !testbool) { + sys.revert("aspect assert failed, expect number value 1, got " + testu64.toString()); + } + + const prop1 = sys.aspect.property.get("prop-key1"); + this.assert("1234567890abcdef", prop1); + const prop2 = sys.aspect.property.get("prop-key2"); + this.assert("abcdefabcdef", prop2); + const prop3 = sys.aspect.property.get("prop-key3"); + this.assertStr("hello", prop3); + } + + checkTest(expect: string): bool { + const test = uint8ArrayToHex(sys.aspect.property.get("test")); + + if (test != expect) { + return false; + } + return true; + } + + checkDiffs(expect: Uint256, actual: Uint256): void { + const oneArt = new Uint256().fromHex("0xde0b6b3a7640000"); + if (actual.cmp(Uint256.ZERO) > 0 && expect.sub(actual).cmp(oneArt) > 0) { + let msg = "aspect assert failed, diffs should not more than 1 art, expect " + expect.toHex() + ", got " + actual.toHex(); + sys.revert(msg); + } + } + + assert(expect: string, actual: Uint8Array, name: string = ""): void { + const strAct = uint8ArrayToHex(actual); + this.assertStr(expect, strAct, name); + } + + assertBool(expect: bool, actual: bool, name: string = ""): void { + this.assertStr(expect ? "true" : "false", actual ? "true" : "false", name); + } + + assertStr(expect: string, actual: string, name: string = ""): void { + if (expect != actual) { + let msg = name + ": aspect assert failed, expect " + expect + ", got " + actual; + sys.revert(msg); + return; + } + } +} +// 2.register aspect Instance +const aspect = new HostApiAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/init-fail.ts b/packages/testcases/aspect/init-fail.ts new file mode 100644 index 0000000..cfb2286 --- /dev/null +++ b/packages/testcases/aspect/init-fail.ts @@ -0,0 +1,42 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + BigInt, + entryPoint, + execute, + hexToUint8Array, + IAspectBase, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + stringToUint8Array, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +// Dummy Aspect that does not do anything, just used to test the aspect basic features. +class InitFailAspect implements IAspectBase { + init(input: InitInput): void { + sys.revert('init fail'); + } + + isOwner(_: Uint8Array): bool { + return false; + } +} + +// 2.register aspect Instance +const aspect = new InitFailAspect(); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/init.ts b/packages/testcases/aspect/init.ts new file mode 100644 index 0000000..1874cbd --- /dev/null +++ b/packages/testcases/aspect/init.ts @@ -0,0 +1,73 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + BigInt, + entryPoint, + execute, + hexToUint8Array, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + stringToUint8Array, + sys, + uint8ArrayToHex, + } from '@artela/aspect-libs'; + + // Dummy Aspect that does not do anything, just used to test the aspect basic features. + class InitAspect implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void { + sys.aspect.mutableState.get('init').set(input.callData); + } + + isOwner(_: Uint8Array): bool { + return false; + } + + operation(_: OperationInput): Uint8Array { + sys.require('init' == this.getData(), "data not as expected"); + return this.getData(); + } + + preContractCall(_: PreContractCallInput): void { + sys.require('init' == this.getData(), "data not as expected"); + } + + postContractCall(_: PostContractCallInput): void { + sys.require('init' == this.getData(), "data not as expected"); + } + + preTxExecute(_: PreTxExecuteInput): void { + sys.require('init' == this.getData(), "data not as expected"); + } + + postTxExecute(_: PostTxExecuteInput): void { + sys.require('init' == this.getData(), "data not as expected"); + } + + getData(): T { + return sys.aspect.mutableState.get('init').unwrap(); + } + } + + // 2.register aspect Instance + const aspect = new InitAspect(); + entryPoint.setOperationAspect(aspect); + entryPoint.setAspect(aspect); + + // 3.must export it + export { execute, allocate }; + \ No newline at end of file diff --git a/packages/testcases/aspect/invalid-jit-call-aspect.ts b/packages/testcases/aspect/invalid-jit-call-aspect.ts index 0faf435..2f20604 100644 --- a/packages/testcases/aspect/invalid-jit-call-aspect.ts +++ b/packages/testcases/aspect/invalid-jit-call-aspect.ts @@ -6,6 +6,7 @@ import { entryPoint, execute, IAspectOperation, + InitInput, IPostContractCallJP, IPostTxExecuteJP, IPreContractCallJP, @@ -25,6 +26,8 @@ import { } from '@artela/aspect-libs'; class InvalidJitCallAspect implements IPreTxExecuteJP, IPostTxExecuteJP, ITransactionVerifier, IAspectOperation, IPreContractCallJP, IPostContractCallJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { return true; } diff --git a/packages/testcases/aspect/jit-call.ts b/packages/testcases/aspect/jit-call.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/testcases/aspect/jit-gaming-aspect.ts b/packages/testcases/aspect/jit-gaming-aspect.ts new file mode 100644 index 0000000..572f9c0 --- /dev/null +++ b/packages/testcases/aspect/jit-gaming-aspect.ts @@ -0,0 +1,276 @@ +import { + allocate, + entryPoint, + execute, + BigInt, + BytesData, + ethereum, + hexToUint8Array, + IAspectOperation, + IPostContractCallJP, + JitCallBuilder, + OperationInput, + PostContractCallInput, + stringToUint8Array, + sys, + uint8ArrayToHex, + uint8ArrayToString, + InitInput, +} from "@artela/aspect-libs"; +import { Protobuf } from "as-proto/assembly/Protobuf"; + +/** + * There are two types of Aspect: Transaction-Level Aspect and Block-Level Aspect. + * Transaction-Level Aspect will be triggered whenever there is a transaction calling the bound smart contract. + * Block-Level Aspect will be triggered whenever there is a new block generated. + * + * An Aspect can be Transaction-Level, Block-Level,IAspectOperation or both. + * You can implement corresponding interfaces: IAspectTransaction, IAspectBlock,IAspectOperation or both to tell Artela which + * type of Aspect you are implementing. + */ +export class JITGamingAspect implements IPostContractCallJP, IAspectOperation { + + static readonly SYS_PLAYER_STORAGE_KEY: string = 'SYS_PLAYER_STORAGE_KEY'; + + static readonly UNASSIGNED_SYS_PLAYER_STORAGE_KEY: string = 'UNASSIGNED_SYS_PLAYER_STORAGE_KEY'; + + static readonly SYS_PLAYER_ROOM_KEY: string = 'SYS_PLAYER_ROOM_KEY'; + + init(input: InitInput): void { } + + postContractCall(input: PostContractCallInput): void { + let calldata = uint8ArrayToHex(input.call!.data); + let method = this.parseCallMethod(calldata); + + // if method is 'move(uint64,uint8)' + if (method == "0x72d7d60c") { + let currentCaller = uint8ArrayToHex(input.call!.from); + let sysPlayers = this.getSysPlayersList(); + let isSysPlayer = sysPlayers.includes(this.rmPrefix(currentCaller).toLowerCase()); + + // if player moves, sys players also move just-in-time + if (!isSysPlayer) { + const roomId = this.extractRoomId(input.call!.data); + const sysPlayer = this.getSysPlayerAccount(roomId) + if (sysPlayer == "") { + // no free sys player, do nothing + return; + } + + // do jit-call + this.doMove(sysPlayer, roomId, input); + } else { + // if sys player moves, do nothing in Aspect and pass the join point + return; + } + } + + } + + extractRoomId(callData: Uint8Array): u64 { + let roomId = u64.parse(uint8ArrayToHex(callData.subarray(28, 36))); + return roomId; + } + + getSysPlayerAccount(roomId: u64): string { + const storageRef = sys.aspect.mutableState.get(`${JITGamingAspect.SYS_PLAYER_ROOM_KEY}:${roomId.toString()}`); + let sysPlayerInRoom = uint8ArrayToHex(storageRef.unwrap()); + if (!sysPlayerInRoom.length) { + // no one in the room, got assign one of the unassigned sys players to the room + const unassignedSysPlayers = sys.aspect.mutableState.get(JITGamingAspect.UNASSIGNED_SYS_PLAYER_STORAGE_KEY); + const encodedUnassignedSysPlayers = uint8ArrayToHex(unassignedSysPlayers.unwrap()); + if (encodedUnassignedSysPlayers.length < 44) { + // no free sys player + sys.log("no free sys player"); + return "" + } + + const count = encodedUnassignedSysPlayers.slice(0, 4); + const encodedDataLen = encodedUnassignedSysPlayers.length; + sysPlayerInRoom = encodedUnassignedSysPlayers.slice(encodedDataLen - 40, encodedDataLen); + + // update the unassigned players + const newCount = BigInt.fromString(count, 16).toInt32() - 1; + const newEncodedUnassignedSysPlayers = this.rmPrefix(newCount.toString(16)).padStart(4, '0') + encodedUnassignedSysPlayers.slice(4, encodedDataLen - 40); + unassignedSysPlayers.set(hexToUint8Array(newEncodedUnassignedSysPlayers)); + + // update the sys player in room + storageRef.set(hexToUint8Array(sysPlayerInRoom)); + } + + return sysPlayerInRoom; + } + + operation(input: OperationInput): Uint8Array { + // calldata encode rule + // * 2 bytes: op code + // op codes lists: + // 0x0001 | registerSysPlayer + // + // ** 0x10xx means read only op ** + // 0x1001 | getSysPlayers + // 0x1002 | getAAWaletNonce + // + // * variable-length bytes: params + // encode rule of params is defined by each method + const calldata = uint8ArrayToHex(input.callData); + const op = this.parseOP(calldata); + const params = this.parsePrams(calldata); + + if (op == "0001") { + this.registerSysPlayer(params); + return new Uint8Array(0); + } + if (op == "1001") { + let ret = this.getSysPlayers(); + return stringToUint8Array(ret); + } + if (op == "1002") { + let ret = this.getSysPlayerInRoom(BigInt.fromString(params, 16).toUInt64()); + return stringToUint8Array(ret); + } + + sys.revert("unknown op"); + return new Uint8Array(0); + } + + //**************************** + // internal methods + //**************************** + doMove(sysPlayer: string, roomId: u64, input: PostContractCallInput): void { + // init jit call + let direction = this.getRandomDirection(input); + + let moveCalldata = ethereum.abiEncode('move', [ + ethereum.Number.fromU64(roomId, 64), + ethereum.Number.fromU8(direction, 8) + ]); + + // Construct a JIT request (similar to the user operation defined in EIP-4337) + let request = JitCallBuilder.simple( + hexToUint8Array(sysPlayer), + input.call!.to, + hexToUint8Array(moveCalldata) + ).build(); + + // Submit the JIT call + let response = sys.hostApi.evmCall.jitCall(request); + + // Verify successful submission of the call, + // call may fail if room is full + if (!response.success) { + sys.log(`Failed to submit the JIT call: ${sysPlayer}, err: ${response.errorMsg}, ret: ${uint8ArrayToString(response.ret)}`); + } else { + sys.log(`Successfully submitted the JIT call: ${sysPlayer}, ret: ${uint8ArrayToString(response.ret)}`); + } + } + + getRandomDirection(input: PostContractCallInput): u8 { + const rawHash = sys.hostApi.runtimeContext.get('tx.hash'); + var hash = Protobuf.decode(rawHash, BytesData.decode).data; + let random = uint8ArrayToHex(hash.slice(4, 6)); + return (BigInt.fromString(random, 16).toUInt64() % 4); + } + + parseCallMethod(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(0, 10); + } + return '0x' + calldata.substring(0, 8); + } + + parseOP(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(2, 6); + } else { + return calldata.substring(0, 4); + } + } + + parsePrams(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(6, calldata.length); + } else { + return calldata.substring(4, calldata.length); + } + } + + rmPrefix(data: string): string { + if (data.startsWith('0x')) { + return data.substring(2, data.length); + } else { + return data; + } + } + + registerSysPlayer(params: string): void { + this.saveSysPlayer(params, JITGamingAspect.SYS_PLAYER_STORAGE_KEY); + this.saveSysPlayer(params, JITGamingAspect.UNASSIGNED_SYS_PLAYER_STORAGE_KEY); + } + + private saveSysPlayer(params: string, storagePrefix: string): void { + // params encode rules: + // 20 bytes: player address + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + + sys.require(params.length == 40, "illegal params"); + const player = params.slice(0, 40); + + let sysPlayersKey = sys.aspect.mutableState.get(storagePrefix); + let encodeSysPlayers = uint8ArrayToHex(sysPlayersKey.unwrap()); + if (encodeSysPlayers == "") { + let count = "0001"; + encodeSysPlayers = count + player; + } else { + let encodeCount = encodeSysPlayers.slice(0, 4); + let count = BigInt.fromString(encodeCount, 16).toInt32(); + + count++; + encodeCount = this.rmPrefix(count.toString(16)).padStart(4, '0'); + + encodeSysPlayers = encodeCount + encodeSysPlayers.slice(4, encodeSysPlayers.length) + player; + } + + sysPlayersKey.set(hexToUint8Array(encodeSysPlayers)); + } + + getSysPlayers(): string { + return uint8ArrayToHex(sys.aspect.mutableState.get(JITGamingAspect.SYS_PLAYER_STORAGE_KEY).unwrap()); + } + + getSysPlayerInRoom(roomId: u64): string { + return uint8ArrayToHex(sys.aspect.mutableState.get(`${JITGamingAspect.SYS_PLAYER_ROOM_KEY}:${roomId.toString()}`).unwrap()); + } + + getSysPlayersList(): Array { + let sysPlayersKey = sys.aspect.mutableState.get(JITGamingAspect.SYS_PLAYER_STORAGE_KEY); + let encodeSysPlayers = uint8ArrayToHex(sysPlayersKey.unwrap()); + + let encodeCount = encodeSysPlayers.slice(0, 4); + let count = BigInt.fromString(encodeCount, 16).toInt32(); + const array = new Array(); + encodeSysPlayers = encodeSysPlayers.slice(4); + for (let i = 0; i < count; ++i) { + array[i] = encodeSysPlayers.slice(40 * i, 40 * (i + 1)).toLowerCase(); + } + + return array; + } + + + //**************************** + // unused methods + //**************************** + + isOwner(sender: Uint8Array): bool { + return false; + } +} + +// 2.register aspect Instance +const aspect = new JITGamingAspect() +entryPoint.setAspect(aspect) +entryPoint.setOperationAspect(aspect) + +// 3.must export it +export { execute, allocate } \ No newline at end of file diff --git a/packages/testcases/aspect/joinpoints.ts b/packages/testcases/aspect/joinpoints.ts new file mode 100644 index 0000000..a077dd6 --- /dev/null +++ b/packages/testcases/aspect/joinpoints.ts @@ -0,0 +1,563 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + ITransactionVerifier, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + TxVerifyInput, + sys, + uint8ArrayToHex, + hexToUint8Array, + Uint256, + BoolData, + StringData, +} from '@artela/aspect-libs'; + +import { Protobuf } from 'as-proto/assembly'; + +class Joinpoints implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP, + ITransactionVerifier { + init(input: InitInput): void { + this.checkInput(input.block!.number, input.tx!.from, input.tx!.to, input.tx!.hash, "init"); + } + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + verifyTx(input: TxVerifyInput): Uint8Array { + const notEmptyAddress = hexToUint8Array("0000000000000000000000000000000000000001"); + this.checkInput(input.block!.number, notEmptyAddress, input.tx!.to, input.tx!.hash, "verifyTx"); + + const strBlockNum = "input.block.number:" + input.block!.number.toString(); + const strTxTo = "input.tx.to:" + input.tx!.to.toString(); + const strTxHash = "input.tx.hash:" + input.tx!.hash.toString(); + + const keys = [ + "isCall", + "tx.type", + "tx.chainId", + "tx.accessList", + "tx.nonce", + "tx.gasPrice", + "tx.gas", + "tx.gasTipCap", + "tx.gasFeeCap", + "tx.to", + "tx.value", + "tx.data", + "tx.bytes", + "tx.hash", + "tx.unsigned.bytes", + "tx.unsigned.hash", + "block.header.number", + "env.extraEIPs", + "env.enableCreate", + "env.enableCall", + "env.allowUnprotectedTxs", + "env.chain.chainId", + "env.chain.homesteadBlock", + "env.chain.daoForkBlock", + "env.chain.daoForkSupport", + "env.chain.eip150Block", + "env.chain.eip155Block", + "env.chain.eip158Block", + "env.chain.byzantiumBlock", + "env.chain.constantinopleBlock", + "env.chain.petersburgBlock", + "env.chain.istanbulBlock", + "env.chain.muirGlacierBlock", + "env.chain.berlinBlock", + "env.chain.londonBlock", + "env.chain.arrowGlacierBlock", + "env.chain.grayGlacierBlock", + "env.chain.mergeNetSplitBlock", + "env.chain.shanghaiTime", + "env.chain.cancunTime", + "env.chain.pragueTime", + "env.consensusParams.block.maxGas", + "env.consensusParams.block.maxBytes", + "env.consensusParams.evidence.maxAgeDuration", + "env.consensusParams.evidence.maxAgeNumBlocks", + "env.consensusParams.evidence.maxBytes", + "env.consensusParams.validator.pubKeyTypes", + "env.consensusParams.appVersion", + "aspect.id", + "aspect.version" + ]; + + // this.checkSys("verifyTx", keys, strBlockNum + ";" + strTxTo + ";" + strTxHash); + + return sys.aspect.mutableState.get('owner').unwrap(); + } + + operation(input: OperationInput): Uint8Array { + this.checkInput(input.block!.number, input.tx!.from, input.tx!.to, input.tx!.hash, "operation"); + + const strBlockNum = "input.block.number:" + input.block!.number.toString(); + const strTxFrom = "input.tx.from:" + input.tx!.from.toString(); + const strTxTo = "input.tx.to:" + input.tx!.to.toString(); + const strTxHash = "input.tx.hash:" + input.tx!.hash.toString(); + + const keys = [ + "isCall", + "tx.type", + "tx.chainId", + "tx.accessList", + "tx.nonce", + "tx.gasPrice", + "tx.gas", + "tx.gasTipCap", + "tx.gasFeeCap", + "tx.to", + "tx.value", + "tx.data", + "tx.bytes", + "tx.hash", + "tx.unsigned.bytes", + "tx.unsigned.hash", + "block.header.number", + "env.extraEIPs", + "env.enableCreate", + "env.enableCall", + "env.allowUnprotectedTxs", + "env.chain.chainId", + "env.chain.homesteadBlock", + "env.chain.daoForkBlock", + "env.chain.daoForkSupport", + "env.chain.eip150Block", + "env.chain.eip155Block", + "env.chain.eip158Block", + "env.chain.byzantiumBlock", + "env.chain.constantinopleBlock", + "env.chain.petersburgBlock", + "env.chain.istanbulBlock", + "env.chain.muirGlacierBlock", + "env.chain.berlinBlock", + "env.chain.londonBlock", + "env.chain.arrowGlacierBlock", + "env.chain.grayGlacierBlock", + "env.chain.mergeNetSplitBlock", + "env.chain.shanghaiTime", + "env.chain.cancunTime", + "env.chain.pragueTime", + "env.consensusParams.block.maxGas", + "env.consensusParams.block.maxBytes", + "env.consensusParams.evidence.maxAgeDuration", + "env.consensusParams.evidence.maxAgeNumBlocks", + "env.consensusParams.evidence.maxBytes", + "env.consensusParams.validator.pubKeyTypes", + "env.consensusParams.appVersion", + "aspect.id", + "aspect.version" + ]; + // this.checkSys("operation", keys, strBlockNum + ";" + strTxFrom + ";" + strTxTo + ";" + strTxHash); + + return input.callData; + } + + preContractCall(input: PreContractCallInput): void { + const notEmptyHash = Uint256.fromInt64(1).toUint8Array(); + this.checkInput(input.block!.number, input.call!.from, input.call!.to, notEmptyHash, "PreContractCallInput"); + this.assert(input.call!.gas > 0, "PostContractCallInput, gas large than zero"); + + const strBlockNum = "input.block.number:" + input.block!.number.toString(); + const strTxFrom = "input.call.from:" + input.call!.from.toString(); + const strTxTo = "input.call.to:" + input.call!.to.toString(); + const strTxGas = "input.call.gas:" + input.call!.gas.toString(); + + const keys = [ + "isCall", + "tx.type", + "tx.chainId", + "tx.accessList", + "tx.nonce", + "tx.gasPrice", + "tx.gas", + "tx.gasTipCap", + "tx.gasFeeCap", + "tx.to", + "tx.value", + "tx.data", + "tx.bytes", + "tx.hash", + "tx.unsigned.bytes", + "tx.unsigned.hash", + "tx.sig.v", + "tx.sig.r", + "tx.sig.s", + "tx.from", + "tx.index", + "block.header.parentHash", + "block.header.miner", + "block.header.number", + "block.header.timestamp", + "env.extraEIPs", + "env.enableCreate", + "env.enableCall", + "env.allowUnprotectedTxs", + "env.chain.chainId", + "env.chain.homesteadBlock", + "env.chain.daoForkBlock", + "env.chain.daoForkSupport", + "env.chain.eip150Block", + "env.chain.eip155Block", + "env.chain.eip158Block", + "env.chain.byzantiumBlock", + "env.chain.constantinopleBlock", + "env.chain.petersburgBlock", + "env.chain.istanbulBlock", + "env.chain.muirGlacierBlock", + "env.chain.berlinBlock", + "env.chain.londonBlock", + "env.chain.arrowGlacierBlock", + "env.chain.grayGlacierBlock", + "env.chain.mergeNetSplitBlock", + "env.chain.shanghaiTime", + "env.chain.cancunTime", + "env.chain.pragueTime", + "env.consensusParams.block.maxGas", + "env.consensusParams.block.maxBytes", + "env.consensusParams.evidence.maxAgeDuration", + "env.consensusParams.evidence.maxAgeNumBlocks", + "env.consensusParams.evidence.maxBytes", + "env.consensusParams.validator.pubKeyTypes", + "env.consensusParams.appVersion", + "aspect.id", + "aspect.version", + "msg.from", + "msg.to", + "msg.value", + "msg.gas", + "msg.input", + "msg.index" + // "msg.result.ret", + // "msg.result.gasUsed", + // "msg.result.error" + ]; + + // this.checkSys("preContractCall", keys, strBlockNum + ";" + strTxFrom + ";" + strTxTo + ";" + strTxGas); + } + + postContractCall(input: PostContractCallInput): void { + const notEmptyHash = Uint256.fromInt64(1).toUint8Array(); + this.checkInput(input.block!.number, input.call!.from, input.call!.to, notEmptyHash, "PostContractCallInput"); + this.assert(input.call!.gas > 0, "PostContractCallInput, gas large than zero"); + + const strBlockNum = "input.block.number:" + input.block!.number.toString(); + const strTxFrom = "input.call.from:" + input.call!.from.toString(); + const strTxTo = "input.call.to:" + input.call!.to.toString(); + const strTxGas = "input.call.gas:" + input.call!.gas.toString(); + + const keys = [ + "isCall", + "tx.type", + "tx.chainId", + "tx.accessList", + "tx.nonce", + "tx.gasPrice", + "tx.gas", + "tx.gasTipCap", + "tx.gasFeeCap", + "tx.to", + "tx.value", + "tx.data", + "tx.bytes", + "tx.hash", + "tx.unsigned.bytes", + "tx.unsigned.hash", + "tx.sig.v", + "tx.sig.r", + "tx.sig.s", + "tx.from", + "tx.index", + "aspect.id", + "aspect.version", + "msg.from", + "msg.to", + "msg.value", + "msg.gas", + "msg.input", + "msg.index", + "msg.result.ret", + "msg.result.gasUsed", + "msg.result.error", + "block.header.parentHash", + "block.header.miner", + "block.header.number", + "block.header.timestamp", + "env.extraEIPs", + "env.enableCreate", + "env.enableCall", + "env.allowUnprotectedTxs", + "env.chain.chainId", + "env.chain.homesteadBlock", + "env.chain.daoForkBlock", + "env.chain.daoForkSupport", + "env.chain.eip150Block", + "env.chain.eip155Block", + "env.chain.eip158Block", + "env.chain.byzantiumBlock", + "env.chain.constantinopleBlock", + "env.chain.petersburgBlock", + "env.chain.istanbulBlock", + "env.chain.muirGlacierBlock", + "env.chain.berlinBlock", + "env.chain.londonBlock", + "env.chain.arrowGlacierBlock", + "env.chain.grayGlacierBlock", + "env.chain.mergeNetSplitBlock", + "env.chain.shanghaiTime", + "env.chain.cancunTime", + "env.chain.pragueTime", + "env.consensusParams.block.maxGas", + "env.consensusParams.block.maxBytes", + "env.consensusParams.evidence.maxAgeDuration", + "env.consensusParams.evidence.maxAgeNumBlocks", + "env.consensusParams.evidence.maxBytes", + "env.consensusParams.validator.pubKeyTypes", + "env.consensusParams.appVersion" + ]; + + // this.checkSys("postContractCall", keys, strBlockNum + ";" + strTxFrom + ";" + strTxTo + ";" + strTxGas); + } + + preTxExecute(input: PreTxExecuteInput): void { + this.checkInput(input.block!.number, input.tx!.from, input.tx!.to, input.tx!.hash, "PreTxExecuteInput"); + + const strBlockNum = "input.block.number:" + input.block!.number.toString(); + const strTxFrom = "input.tx.from:" + input.tx!.from.toString(); + const strTxTo = "input.tx.to:" + input.tx!.to.toString(); + const strTxHash = "input.tx.hash:" + input.tx!.hash.toString(); + + const keys = [ + "isCall", + "tx.type", + "tx.chainId", + "tx.accessList", + "tx.nonce", + "tx.gasPrice", + "tx.gas", + "tx.gasTipCap", + "tx.gasFeeCap", + "tx.to", + "tx.value", + "tx.data", + "tx.bytes", + "tx.hash", + "tx.unsigned.bytes", + "tx.unsigned.hash", + "tx.sig.v", + "tx.sig.r", + "tx.sig.s", + "tx.from", + "tx.index", + "block.header.parentHash", + "block.header.miner", + "block.header.number", + "block.header.timestamp", + "env.extraEIPs", + "env.enableCreate", + "env.enableCall", + "env.allowUnprotectedTxs", + "env.chain.chainId", + "env.chain.homesteadBlock", + "env.chain.daoForkBlock", + "env.chain.daoForkSupport", + "env.chain.eip150Block", + "env.chain.eip155Block", + "env.chain.eip158Block", + "env.chain.byzantiumBlock", + "env.chain.constantinopleBlock", + "env.chain.petersburgBlock", + "env.chain.istanbulBlock", + "env.chain.muirGlacierBlock", + "env.chain.berlinBlock", + "env.chain.londonBlock", + "env.chain.arrowGlacierBlock", + "env.chain.grayGlacierBlock", + "env.chain.mergeNetSplitBlock", + "env.chain.shanghaiTime", + "env.chain.cancunTime", + "env.chain.pragueTime", + "env.consensusParams.block.maxGas", + "env.consensusParams.block.maxBytes", + "env.consensusParams.evidence.maxAgeDuration", + "env.consensusParams.evidence.maxAgeNumBlocks", + "env.consensusParams.evidence.maxBytes", + "env.consensusParams.validator.pubKeyTypes", + "env.consensusParams.appVersion", + "aspect.id", + "aspect.version" + ]; + + // this.checkSys("preTxExecute", keys, strBlockNum + ";" + strTxFrom + ";" + strTxTo + ";" + strTxHash); + } + + postTxExecute(input: PostTxExecuteInput): void { + this.checkInput(input.block!.number, input.tx!.from, input.tx!.to, input.tx!.hash, "PostTxExecuteInput"); + + const strBlockNum = "input.block.number:" + input.block!.number.toString(); + const strTxFrom = "input.tx.from:" + input.tx!.from.toString(); + const strTxTo = "input.tx.to:" + input.tx!.to.toString(); + const strTxHash = "input.tx.hash:" + input.tx!.hash.toString(); + + const keys = [ + "isCall", + "tx.type", + "tx.chainId", + "tx.accessList", + "tx.nonce", + "tx.gasPrice", + "tx.gas", + "tx.gasTipCap", + "tx.gasFeeCap", + "tx.to", + "tx.value", + "tx.data", + "tx.bytes", + "tx.hash", + "tx.unsigned.bytes", + "tx.unsigned.hash", + "tx.sig.v", + "tx.sig.r", + "tx.sig.s", + "tx.from", + "tx.index", + "block.header.parentHash", + "block.header.miner", + "block.header.number", + "block.header.timestamp", + "env.extraEIPs", + "env.enableCreate", + "env.enableCall", + "env.allowUnprotectedTxs", + "env.chain.chainId", + "env.chain.homesteadBlock", + "env.chain.daoForkBlock", + "env.chain.daoForkSupport", + "env.chain.eip150Block", + "env.chain.eip155Block", + "env.chain.eip158Block", + "env.chain.byzantiumBlock", + "env.chain.constantinopleBlock", + "env.chain.petersburgBlock", + "env.chain.istanbulBlock", + "env.chain.muirGlacierBlock", + "env.chain.berlinBlock", + "env.chain.londonBlock", + "env.chain.arrowGlacierBlock", + "env.chain.grayGlacierBlock", + "env.chain.mergeNetSplitBlock", + "env.chain.shanghaiTime", + "env.chain.cancunTime", + "env.chain.pragueTime", + "env.consensusParams.block.maxGas", + "env.consensusParams.block.maxBytes", + "env.consensusParams.evidence.maxAgeDuration", + "env.consensusParams.evidence.maxAgeNumBlocks", + "env.consensusParams.evidence.maxBytes", + "env.consensusParams.validator.pubKeyTypes", + "env.consensusParams.appVersion", + "aspect.id", + "aspect.version", + "receipt.status", + "receipt.logs", + "receipt.gasUsed", + "receipt.cumulativeGasUsed", + "receipt.bloom" + ]; + + // this.checkSys("postTxExecute", keys, strBlockNum + ";" + strTxFrom + ";" + strTxTo + ";" + strTxHash); + } + + checkInput(blockNumber: u64, txFrom: Uint8Array, txTo: Uint8Array, txHash: Uint8Array, name: string): void { + const isCallData = sys.hostApi.runtimeContext.get("isCall"); + const isCall = Protobuf.decode(isCallData, BoolData.decode).data; + if (isCall) { + return; + } + + const emptyHash = "0000000000000000000000000000000000000000000000000000000000000000"; + const emptyAddress = "0000000000000000000000000000000000000000"; + + this.assert(blockNumber > 0, name + ", block.number should large than zero"); + this.assert(uint8ArrayToHex(txFrom) != emptyAddress, name + ", from should not empty"); + this.assert(uint8ArrayToHex(txTo) != emptyAddress, name + ", to should not empty"); + this.assert(uint8ArrayToHex(txHash) != emptyHash, name + ", txhash should not empty"); + } + + checkSys(jp: string, keys: string[], others: string): void { + const aspectID = sys.aspect.id(); + this.assert(aspectID != "", "sys.aspect.id"); + + const aspectVer = sys.aspect.version(); + this.assert(aspectVer == 1, "sys.aspect.version"); + + let str: string = ""; + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + // sys.log("joinpoints, get cotnext key: " + key); + const data = sys.hostApi.runtimeContext.get(key); + if (!data || data.length == 0) { + const kvstr = key + ":" + "null" + ";"; + str = str.concat(kvstr); + continue + } + const value = uint8ArrayToHex(data); + const kvstr = "|" + key + "|" + value + "|;"; + sys.log("joinpoints, get cotnext key: " + key + ", value: " + value); + str = str.concat(kvstr); + } + + str = str.concat(others); + + const savedContext = sys.aspect.mutableState.get("savedContext-" + jp); + if (savedContext.unwrap() != "") { + this.assertStr(savedContext.unwrap(), str, "check sys.context"); + } else { + savedContext.set(str); + } + } + + assertStr(expect: string, actual: string, name: string = ""): void { + if (expect != actual) { + let msg = name + ": aspect assert failed, expect:\n" + expect + ", got:\n" + actual; + sys.revert(msg); + return; + } + } + + assert(equal: bool, name: string = ""): void { + if (!equal) { + let msg = "assert failed: " + name; + sys.revert(msg); + return; + } + } +} +// 2.register aspect Instance +const aspect = new Joinpoints(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/multi-read-write-check.ts b/packages/testcases/aspect/multi-read-write-check.ts index 6bb18d8..eeb2910 100644 --- a/packages/testcases/aspect/multi-read-write-check.ts +++ b/packages/testcases/aspect/multi-read-write-check.ts @@ -2,6 +2,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, PostTxExecuteInput, @@ -15,6 +16,8 @@ class MultiReadWriteCheck implements IPostTxExecuteJP, IPreTxExecuteJP { ctxKey: string = 'key_for_context'; stateKey: string = 'key_for_state'; + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return !!uint8ArrayToHex(value).includes(uint8ArrayToString(sender)); diff --git a/packages/testcases/aspect/operation-aspect.ts b/packages/testcases/aspect/operation-aspect.ts index 28196fb..f682b42 100644 --- a/packages/testcases/aspect/operation-aspect.ts +++ b/packages/testcases/aspect/operation-aspect.ts @@ -5,6 +5,7 @@ import { entryPoint, execute, IAspectOperation, + InitInput, OperationInput, stringToUint8Array, sys, @@ -30,6 +31,8 @@ class AspectTest implements IAspectOperation { isOwner(sender: Uint8Array): bool { return true; } + + init(input: InitInput): void {} } // 2.register aspect Instance diff --git a/packages/testcases/aspect/operation-test.ts b/packages/testcases/aspect/operation-test.ts index 2c97737..517664b 100644 --- a/packages/testcases/aspect/operation-test.ts +++ b/packages/testcases/aspect/operation-test.ts @@ -8,9 +8,12 @@ import { OperationInput, uint8ArrayToHex, sys, + InitInput, } from '@artela/aspect-libs'; class AspectTest implements IAspectOperation { + init(input: InitInput): void { } + parseOP(calldata: string): string { if (calldata.startsWith('0x')) { return calldata.substring(2, 6); @@ -43,9 +46,13 @@ class AspectTest implements IAspectOperation { const op = this.parseOP(calldata); const params = this.parsePrams(calldata); - sys.log("||| num = " + calldata + " params=" + params+" op="+op); + sys.log("||| num = " + calldata + " params=" + params + " op=" + op); if (op == "0001") { - sys.log('||| adamayu in 0001'); + if (params == "100001") { + sys.log('||| adamayu in 0001'); + return new Uint8Array(0); + } + sys.revert("unknown params"); return new Uint8Array(0); } if (op == "0002") { @@ -65,7 +72,11 @@ class AspectTest implements IAspectOperation { return new Uint8Array(0); } if (op == "1003") { - sys.log('|||adamayu in 1003'); + if (params == "101003") { + sys.log('||| adamayu in 1003'); + return new Uint8Array(0); + } + sys.revert("unknown params"); return new Uint8Array(0); } if (op == "1004") { @@ -87,4 +98,4 @@ const aspect = new AspectTest(); entryPoint.setOperationAspect(aspect); // 3.must export it -export {execute, allocate}; +export { execute, allocate }; diff --git a/packages/testcases/aspect/property.ts b/packages/testcases/aspect/property.ts new file mode 100644 index 0000000..785b3d8 --- /dev/null +++ b/packages/testcases/aspect/property.ts @@ -0,0 +1,71 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + BigInt, + entryPoint, + execute, + hexToUint8Array, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + stringToUint8Array, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +// Dummy Aspect that does not do anything, just used to test the aspect basic features. +class PropertyAspect + implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP +{ + init(input: InitInput): void { + const ownerThroughProperty = sys.aspect.property.get('owner'); + sys.aspect.mutableState.get('owner').set(ownerThroughProperty); + } + + isOwner(addr: Uint8Array): bool { + return uint8ArrayToHex(sys.aspect.property.get('owner')) == uint8ArrayToHex(addr); + } + + operation(_: OperationInput): Uint8Array { + const ownerThroughProperty = sys.aspect.property.get('owner'); + return ownerThroughProperty; + } + + preTxExecute(input: PreTxExecuteInput): void { + sys.require(this.isOwner(input.tx!.from), 'sender is not owner'); + } + + preContractCall(input: PreContractCallInput): void { + sys.require(this.isOwner(input.call!.from), 'sender is not owner'); + } + + postContractCall(input: PostContractCallInput): void { + sys.require(this.isOwner(input.call!.from), 'sender is not owner'); + } + + postTxExecute(input: PostTxExecuteInput): void { + sys.require(this.isOwner(input.tx!.from), 'sender is not owner'); + } +} + +// 2.register aspect Instance +const aspect = new PropertyAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/revert-aspect.ts b/packages/testcases/aspect/revert-aspect.ts new file mode 100644 index 0000000..686bfd7 --- /dev/null +++ b/packages/testcases/aspect/revert-aspect.ts @@ -0,0 +1,63 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + entryPoint, + execute, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +// Dummy Aspect that does not do anything, just used to test the aspect basic features. +class RevertAspect implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP { + init(input: InitInput): void {} + + isOwner(sender: Uint8Array): bool { + const value = sys.aspect.property.get("owner"); + return uint8ArrayToHex(value) == uint8ArrayToHex(sender); + } + + operation(input: OperationInput): Uint8Array { + return input.callData; + } + + preContractCall(_: PreContractCallInput): void { + sys.revert("preContractCall revert"); + } + + postContractCall(_: PostContractCallInput): void { + sys.revert("postContractCall revert"); + } + + preTxExecute(_: PreTxExecuteInput): void { + sys.revert("preTx revert"); + } + + postTxExecute(_: PostTxExecuteInput): void { + sys.revert("postTx revert"); + } +} + +// 2.register aspect Instance +const aspect = new RevertAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/session-key-aspect.ts b/packages/testcases/aspect/session-key-aspect.ts new file mode 100644 index 0000000..5e05ded --- /dev/null +++ b/packages/testcases/aspect/session-key-aspect.ts @@ -0,0 +1,520 @@ +import { + allocate, + entryPoint, + execute, + BigInt, + BytesData, + hexToUint8Array, + IAspectOperation, + ITransactionVerifier, + OperationInput, + parseCallMethod, + stringToUint8Array, + sys, + TxVerifyInput, + Uint256, + uint8ArrayToHex, + UintData, + InitInput, +} from "@artela/aspect-libs"; + +import { Protobuf } from "as-proto/assembly/Protobuf"; + +/** + * Brief intro: + * + * This Aspect will recover signer address from the transaction signature (r,s,v). + * And then it verify whether the signer is the session key of the EoA, if is, will return the EoA address to base layer. + * Base layer retrieve the address and set it as the sender of this transaction. + * + * Implements: + * + * * Function 'verifyTx': implements the session key verification logic. + * * Function 'operation': implement the session key management logic. EoA call this function to register, update and delete its session keys. + */ +export class SessionKeyAspect implements IAspectOperation, ITransactionVerifier { + init(input: InitInput): void { } + + // *************************************** + // interface methods + // *************************************** + + /** + * Join point: transaction verify + * + * When baselayer process tx's verification, it will call this join point method + * to verify transaction and retrieve the sender address of transaction. + */ + verifyTx(input: TxVerifyInput): Uint8Array { + // validation data encode rules: + // 20 bytes: from + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 32 bytes: r + // 32 bytes: s + // 1 bytes: v + + // 0. decode validation data + const params = uint8ArrayToHex(input.validationData); + + sys.require(params.length == 170, "illegal validation data, actual: " + params.length.toString()); + const from = params.slice(0, 40); + const r = params.slice(40, 104); + const s = params.slice(104, 168); + const v = params.slice(168, 170); + + // 1. verify sig + const rawUnsignedHash = sys.hostApi.runtimeContext.get("tx.unsigned.hash"); + const unsignedHash = Protobuf.decode(rawUnsignedHash, BytesData.decode); + // const msgHash = this.rmPrefix(uint8ArrayToHex(unsignedHash.data)); + + const ret = sys.hostApi.crypto.ecRecover(unsignedHash.data, Uint256.fromHex(v), Uint256.fromHex(r), Uint256.fromHex(s)); + const sKey = uint8ArrayToHex(ret.subarray(12, 32)); + sys.require(sKey != "", "illegal signature, verify fail"); + + // 2. match session key from Aspect's state + // session keys in state are registered + const encodeSKey = sys.aspect.readonlyState.get( + SessionKey.getStateKey(this.rmPrefix(uint8ArrayToHex(input.tx!.to)), from, sKey) + ).unwrap(); + + sys.require(encodeSKey != "", "illegal session key " + from + "-" + sKey); + + // 2. match session key + const sKeyObj = new SessionKey(encodeSKey); + + // 3. verify session key scope + const method = parseCallMethod(input.callData); + sys.require(sKeyObj.getMethodArray().includes(this.rmPrefix(method)), + "illegal session key scope, method isn't allowed. actual is " + method + ". detail: " + uint8ArrayToHex(input.callData)); + + // 4. verify expire block height + const response = sys.hostApi.runtimeContext.get("block.header.number"); + + var blockNumber = Protobuf.decode(response, UintData.decode).data; + + // const currentBlockHeight = ctx.tx.content.unwrap().blockNumber; + const expireBlockHeight = sKeyObj.getExpireBlockHeight(); + const currentBlockHeight = blockNumber; + sys.require(currentBlockHeight <= expireBlockHeight, + "session key has expired; " + expireBlockHeight.toString() + " < " + currentBlockHeight.toString()); + + // 5. return main key + return hexToUint8Array(from); + } + + /** + * operation is an Aspect call. + * + * @param ctx tx input + * @param data + * @return result of operation execution + */ + operation(input: OperationInput): Uint8Array { + // calldata encode rule + // * 2 bytes: op code + // op codes lists: + // 0x0001 | registerSessionKey + // + // ** 0x10xx means read only op ** + // 0x1001 | getSessionKey + // 0x1002 | verifySessionKeyScope + // 0x1003 | verifySignature + // 0x1004 | ecRecover + // 0x1005 | getAllSessionKey + // + // * variable-length bytes: params + // encode rule of params is defined by each method + + const calldata = uint8ArrayToHex(input.callData); + const op = this.parseOP(calldata); + const params = this.parsePrams(calldata); + + if (op == "0001") { + this.registerSessionKey(this.rmPrefix(uint8ArrayToHex(input.tx!.from)), params); + return new Uint8Array(0); + } + else if (op == "1001") { + const ret = this.getSessionKey(params); + return stringToUint8Array(ret); + } + else if (op == "1002") { + const ret = this.verifySessionKeyScope(params); + return ret ? stringToUint8Array("success") : stringToUint8Array("false"); + } + else if (op == "1003") { + const ret = this.verifySignature(params); + return ret ? stringToUint8Array("success") : stringToUint8Array("false"); + } + else if (op == "1004") { + return this.ecRecover(params); + } + else if (op == "1005") { + const ret = this.getAllSessionKey(params); + return stringToUint8Array(ret); + } + else { + sys.revert("unknown op"); + } + return new Uint8Array(0); + } + + // *************************************** + // internal methods + // *************************************** + + parseOP(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(2, 6); + } else { + return calldata.substring(0, 4); + } + } + + parsePrams(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(6, calldata.length); + } else { + return calldata.substring(4, calldata.length); + } + } + + rmPrefix(data: string): string { + if (data.startsWith('0x')) { + return data.substring(2, data.length); + } else { + return data; + } + } + + registerSessionKey(eoa: string, params: string): void { + /** + * params encode rules: + * 20 bytes: session key + * eg. 1f9090aaE28b8a3dCeaDf281B0F12828e676c326 + * 20 bytes: contract address + * eg. 388C818CA8B9251b393131C08a736A67ccB19297 + * 2 bytes: length of methods set + * eg. 0002 + * variable-length: 4 bytes * length of methods set; methods set + * eg. 0a0a0a0a0b0b0b0b + * means there are two methods: ['0a0a0a0a', '0b0b0b0b'] + * 8 bytes: expire block height + */ + + const encodeKey = params + eoa; + + const sKeyObj = new SessionKey(encodeKey); + sKeyObj.verify(); + + // save key + const stateKey = sKeyObj.getStateKey(); + sys.aspect.mutableState.get(stateKey).set(sKeyObj.getEncodeKey()); + + // save key index + let encodeIndex = sys.aspect.mutableState.get(sKeyObj.getEoA()).unwrap(); + const index = new SessionKeyIndexArray(encodeIndex); + + if (!index.decode().includes(stateKey)) { + index.append(stateKey); + sys.aspect.mutableState.get(sKeyObj.getEoA()).set(index.getEncodeKey()) + } + } + + getSessionKey(params: string): string { + // params encode rules: + // 32 bytes: stroge key of session key + sys.require(params.length == 64, "illegal params"); + return sys.aspect.mutableState.get(params.toLowerCase()).unwrap(); + } + + getAllSessionKey(params: string): string { + + // params encode rules: + // 20 bytes: EoA address + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + sys.require(params.length == 40, "illegal params"); + + let encodeIndexObj = sys.aspect.mutableState.get(params.toLowerCase()); + + const index = new SessionKeyIndexArray(encodeIndexObj.unwrap()); + + if (index.getEncodeKey() == "") { + return ""; + } + + let allSessionKey = index.getEncodeKey().slice(0, 4); + let indexArray = index.decode(); + for (let i = 0; i < index.getSize().toInt32(); ++i) { + allSessionKey += this.getSessionKey(indexArray[i]); + } + + return allSessionKey; + } + + verifySessionKeyScope(params: string): bool { + // params encode rules: + // 20 bytes: from + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 20 bytes: to + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 4 bytes: method + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 20 bytes: signer + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + + sys.require(params.length == 128, "illegal params"); + const from = params.slice(0, 40); + const to = params.slice(40, 80); + const method = params.slice(80, 88); + const signer = params.slice(88, 128); + + return this.verifySessionKeyScope_(from, to, method, signer); + } + + verifySignature(params: string): bool { + // params encode rules: + // 20 bytes: from + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 20 bytes: to + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 32 bytes: hash + // 32 bytes: r + // 32 bytes: s + // 1 bytes: v + sys.require(params.length == 274, "illegal params"); + const from = params.slice(0, 40); + const to = params.slice(40, 80); + const hash = params.slice(80, 144); + const r = params.slice(144, 208); + const s = params.slice(208, 272); + const v = params.slice(272, 274); + + return this.verifySignature_(from, to, hash, r, s, v); + } + + ecRecover(params: string): Uint8Array { + // params encode rules: + // 20 bytes: from + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 20 bytes: to + // eg. e2f8857467b61f2e4b1a614a0d560cd75c0c076f + // 32 bytes: hash + // 32 bytes: r + // 32 bytes: s + // 1 bytes: v + sys.require(params.length == 274, "illegal params"); + const from = params.slice(0, 40); + const to = params.slice(40, 80); + const hash = params.slice(80, 144); + const r = params.slice(144, 208); + const s = params.slice(208, 272); + const v = params.slice(272, 274); + + return this.ecRecover_(hash, r, s, v); + } + + verifySessionKeyScope_(from: string, to: string, method: string, signer: string): bool { + + const stateVal = sys.aspect.mutableState.get(SessionKey.getStateKey(to, from, signer)).unwrap(); + + sys.require(stateVal != '', "session key doesn't exist"); + + const sKey = new SessionKey(stateVal); + return sKey.getMethodArray().includes(method); + } + + verifySignature_(from: string, to: string, hash: string, r: string, s: string, v: string): bool { + + //[msgHash 32B][v 32B][r 32B][s 32B] + const syscallInput = hash + + "00000000000000000000000000000000000000000000000000000000000000" + v + + r + + s; + + const ret = sys.hostApi.crypto.ecRecover(hexToUint8Array(hash), Uint256.fromHex(v), Uint256.fromHex(r), Uint256.fromHex(s)); + + sys.require(ret.length > 0, "illegal signature, verify fail"); + + const signer = uint8ArrayToHex(ret.subarray(12, 32)); + if (signer == "") { + return false; + } + + const stateVal = sys.aspect.mutableState.get(SessionKey.getStateKey(to, from, signer)).unwrap(); + + if (stateVal == "") { + return false; + } + + return true; + } + + ecRecover_(hash: string, r: string, s: string, v: string): Uint8Array { + + //[msgHash 32B][v 32B][r 32B][s 32B] + + return sys.hostApi.crypto.ecRecover(hexToUint8Array(hash), Uint256.fromHex(v), Uint256.fromHex(r), Uint256.fromHex(s)); + + } + + // *********************************** + // base Aspect api + // *********************************** + isOwner(sender: Uint8Array): bool { return true; } + +} + +/** +* SessionKey object +* 1. getEncodeKey() will encode the key and return a hex string, which used in storage +* 2. other methods will decode the key and return fields of the key +* +* SessionKey encode rules: +* 20 bytes: session key public key +* eg. 1f9090aaE28b8a3dCeaDf281B0F12828e676c326 +* 20 bytes: contract address +* eg. 388C818CA8B9251b393131C08a736A67ccB19297 +* 2 bytes: length of methods set +* eg. 0002 +* variable-length: 4 bytes * length of methods set; methods set +* eg. 0a0a0a0a0b0b0b0b +* means there are two methods: ['0a0a0a0a', '0b0b0b0b'] +* 8 bytes: expire block height +* 20 bytes: main key +* eg. 388C818CA8B9251b393131C08a736A67ccB19297 +*/ +class SessionKey { + private encodeKey: string; + + constructor(encode: string) { + this.encodeKey = encode; + } + + verify(): void { + sys.require(this.encodeKey.length > 84, "illegal encode session key"); + sys.require(this.encodeKey.length == 84 + 8 * this.getMethodCount().toInt32() + 16 + 40, "illegal encode session key"); + } + + getEncodeKey(): string { + return this.encodeKey; + } + + getSKey(): string { + return this.encodeKey.slice(0, 40); + } + + getContractAddress(): string { + return this.encodeKey.slice(40, 80); + } + + getMethodCount(): BigInt { + return BigInt.fromString(this.encodeKey.slice(80, 84), 16);; + } + + getRawMethodsSet(): string { + return this.encodeKey.slice(84, 84 + 8 * this.getMethodCount().toInt32()); + } + + getMethodArray(): Array { + + const array = new Array(); + for (let i = 0; i < this.getMethodCount().toInt32(); ++i) { + array[i] = this.getRawMethodsSet().slice(8 * i, 8 * (i + 1)); + } + return array; + } + + getExpireBlockHeight(): u64 { + let sliceStart = 84 + 8 * this.getMethodCount().toInt32(); + let sliceEnd = sliceStart + 16; + let encodeBlockHeight = this.encodeKey.slice(sliceStart, sliceEnd); + + return BigInt.fromString(encodeBlockHeight, 16).toUInt64(); + } + + getEoA(): string { + return this.encodeKey.slice(84 + 8 * this.getMethodCount().toInt32() + 16, this.encodeKey.length).toLowerCase(); + } + + getStateKey(): string { + return uint8ArrayToHex( + sys.hostApi.crypto.keccak(hexToUint8Array(this.getContractAddress() + this.getEoA() + this.getSKey()))).toLowerCase(); + } + + static getStateKey(contract: string, eoa: string, sKey: string): string { + return uint8ArrayToHex( + sys.hostApi.crypto.keccak(hexToUint8Array(contract + eoa + sKey))).toLowerCase(); + } +} + +class SessionKeyIndexArray { + private encodeKey: string; + + constructor(encode: string) { + this.encodeKey = encode; + } + + getEncodeKey(): string { + return this.encodeKey; + } + + getSize(): BigInt { + return BigInt.fromString(this.encodeKey.slice(0, 4), 16); + } + + append(key: string): void { + if ("" == this.encodeKey) { + this.encodeKey = "0001" + key; + return; + } + + this.encodeKey += key; + let newSize = this.getSize().toInt32() + 1; + this.encodeKey = this.encodeSize(newSize) + this.encodeKey.slice(4); + } + + decode(): Array { + + if ("" == this.encodeKey) { + return []; + } + + const encodeArray = this.encodeKey.slice(4); + const array = new Array(); + for (let i = 0; i < this.getSize().toInt32(); ++i) { + array[i] = encodeArray.slice(64 * i, 64 * (i + 1)); + } + return array; + } + + encode(array: Array): string { + let encodeString = this.encodeSize(array.length); + for (let i = 0; i < array.length; ++i) { + encodeString += this.rmPrefix(array[i]) + } + return encodeString; + } + + encodeSize(size: i32): string { + let sizeHex = size.toString(16); + sizeHex = this.rmPrefix(sizeHex); + sizeHex = sizeHex.padStart(4, "0"); + return sizeHex; + } + + rmPrefix(data: string): string { + if (data.startsWith('0x')) { + return data.substring(2, data.length); + } else { + return data; + } + } +} + +// 2.register aspect Instance +const aspect = new SessionKeyAspect(); +entryPoint.setAspect(aspect); +entryPoint.setOperationAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/state-aspect.ts b/packages/testcases/aspect/state-aspect.ts index a3ced25..cd4a3ea 100644 --- a/packages/testcases/aspect/state-aspect.ts +++ b/packages/testcases/aspect/state-aspect.ts @@ -3,6 +3,7 @@ import { entryPoint, execute, IAspectOperation, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, OperationInput, @@ -16,6 +17,8 @@ import { } from '@artela/aspect-libs'; class StateAspect implements IPostTxExecuteJP, IPreTxExecuteJP, IAspectOperation { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); diff --git a/packages/testcases/aspect/state.ts b/packages/testcases/aspect/state.ts new file mode 100644 index 0000000..65d79b8 --- /dev/null +++ b/packages/testcases/aspect/state.ts @@ -0,0 +1,87 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + BigInt, + entryPoint, + execute, + hexToUint8Array, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + stringToUint8Array, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +// Dummy Aspect that does not do anything, just used to test the aspect basic features. +class StateAspect + implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP +{ + init(input: InitInput): void { + sys.aspect.mutableState.get('owner').set(input.tx!.from); + } + + isOwner(addr: Uint8Array): bool { + return uint8ArrayToHex(sys.aspect.mutableState.get('owner').unwrap()) == uint8ArrayToHex(addr); + } + + operation(_: OperationInput): Uint8Array { + return stringToUint8Array(sys.aspect.mutableState.get('context').unwrap()); + } + + preTxExecute(_: PreTxExecuteInput): void { + sys.require(this.getData() == '', 'preTxExecute pre-check failed'); + this.appendData('1'); + sys.require(this.getData() == '1', 'preTxExecute post-check failed'); + } + + preContractCall(_: PreContractCallInput): void { + sys.require(this.getData() == '1', 'preContractCall pre-check failed'); + this.appendData('2'); + sys.require(this.getData() == '12', 'preContractCall post-check failed'); + } + + postContractCall(_: PostContractCallInput): void { + sys.require(this.getData() == '12', 'postContractCall pre-check failed'); + this.appendData('3'); + sys.require(this.getData() == '123', 'postContractCall post-check failed'); + } + + postTxExecute(_: PostTxExecuteInput): void { + sys.require(this.getData() == '123', 'postTxExecute pre-check failed'); + this.appendData('4'); + sys.require(this.getData() == '1234', 'postTxExecute post-check failed'); + } + + appendData(data: string): void { + const storage = sys.aspect.mutableState.get('context'); + storage.set(storage.unwrap() + data); + } + + getData(): string { + const storage = sys.aspect.mutableState.get('context'); + return storage.unwrap(); + } +} + +// 2.register aspect Instance +const aspect = new StateAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/statedb-aspect.ts b/packages/testcases/aspect/statedb.ts similarity index 59% rename from packages/testcases/aspect/statedb-aspect.ts rename to packages/testcases/aspect/statedb.ts index 628fcc4..41ec0e6 100644 --- a/packages/testcases/aspect/statedb-aspect.ts +++ b/packages/testcases/aspect/statedb.ts @@ -1,8 +1,10 @@ import { allocate, - BigInt, + BytesData, entryPoint, execute, + hexToUint8Array, + InitInput, IPostContractCallJP, IPostTxExecuteJP, IPreContractCallJP, @@ -14,10 +16,14 @@ import { PreTxExecuteInput, sys, TxVerifyInput, + Uint256, uint8ArrayToHex, + UintData, } from '@artela/aspect-libs'; -class ContextAspect +import { Protobuf } from 'as-proto/assembly/Protobuf'; + +class StateDBAspect implements IPostTxExecuteJP, IPreTxExecuteJP, @@ -25,35 +31,48 @@ class ContextAspect IPreContractCallJP, ITransactionVerifier { + init(input: InitInput): void {} + + getTxNonce(): u64 { + const txNonceRaw = sys.hostApi.runtimeContext.get('tx.nonce'); + return Protobuf.decode(txNonceRaw, UintData.decode).data + } + + getValue(): Uint256 { + const txValueRaw = sys.hostApi.runtimeContext.get('tx.value'); + return Uint256.fromUint8Array(Protobuf.decode(txValueRaw, BytesData.decode).data) + } + verifyTx(input: TxVerifyInput): Uint8Array { const sender = sys.aspect.property.get('sender'); const contract = sys.aspect.property.get('contract'); - const hashKey = sys.aspect.property.get('hashKey'); + const stateValue = Uint256.fromUint8Array(sys.aspect.property.get('value')); const nonce = sys.hostApi.stateDb.nonce(sender); - sys.log('|||sate nonce ' + nonce.toString()); - sys.require(nonce > 0, 'invalid nonce.'); + sys.log('|||state nonce ' + nonce.toString()); + sys.require(nonce > this.getTxNonce() - 1, 'invalid nonce.'); const balance = sys.hostApi.stateDb.balance(contract); - const bigInt = BigInt.fromUint8Array(balance); - sys.log('|||sate balance ' + bigInt.toInt64().toString()); + const bigInt = Uint256.fromUint8Array(balance); + sys.log('|||state balance ' + bigInt.toInt64().toString()); sys.require(bigInt.toInt64() == 0, 'invalid balance.'); const codeSize = sys.hostApi.stateDb.codeSize(contract); - sys.log('|||sate codeSize ' + codeSize.toString()); - sys.require(codeSize > 0, 'invalid codeSize.'); + sys.log('|||state codeSize ' + codeSize.toString()); + sys.require(codeSize == sys.aspect.property.get('codeSize'), 'invalid codeSize.'); const codeHash = sys.hostApi.stateDb.codeHash(contract); sys.log('|||codeHash ' + uint8ArrayToHex(codeHash)); + sys.require(uint8ArrayToHex(codeHash) == sys.aspect.property.get('codeHash'), 'invalid hash.'); const hasSuicided = sys.hostApi.stateDb.hasSuicided(contract); sys.log('|||hasSuicided ' + hasSuicided.toString()); sys.require(hasSuicided == false, 'invalid hasSuicided.'); - const state = sys.hostApi.stateDb.stateAt(contract, hashKey); - sys.log('|||sate stateAt ' + uint8ArrayToHex(state)); + const state = sys.hostApi.stateDb.stateAt(contract, hexToUint8Array('0x')); + sys.log('|||state stateAt ' + uint8ArrayToHex(state)); - sys.require(state.length > 0, 'failed to get state.'); + sys.require(Uint256.fromUint8Array(state).cmp(stateValue) == 0, 'invalid state'); return sender; } @@ -69,27 +88,28 @@ class ContextAspect const hashKey = sys.aspect.property.get('hashKey'); const nonce = sys.hostApi.stateDb.nonce(sender); - sys.log('|||sate nonce ' + nonce.toString()); - sys.require(nonce > 0, 'invalid nonce.'); + sys.log('|||state nonce ' + nonce.toString()); + sys.require(nonce > this.getTxNonce(), 'invalid nonce.'); const balance = sys.hostApi.stateDb.balance(contract); - const bigInt = BigInt.fromUint8Array(balance); - sys.log('|||sate balance ' + bigInt.toInt64().toString()); + const bigInt = Uint256.fromUint8Array(balance); + sys.log('|||state balance ' + bigInt.toInt64().toString()); sys.require(bigInt.toInt64() == 0, 'invalid balance.'); const codeSize = sys.hostApi.stateDb.codeSize(contract); - sys.log('|||sate codeSize ' + codeSize.toString()); - sys.require(codeSize > 0, 'invalid codeSize.'); + sys.log('|||state codeSize ' + codeSize.toString()); + sys.require(codeSize == sys.aspect.property.get('codeSize'), 'invalid codeSize.'); const codeHash = sys.hostApi.stateDb.codeHash(contract); sys.log('|||codeHash ' + uint8ArrayToHex(codeHash)); + sys.require(uint8ArrayToHex(codeHash) == sys.aspect.property.get('codeHash'), 'invalid hash.'); const hasSuicided = sys.hostApi.stateDb.hasSuicided(contract); sys.log('|||hasSuicided ' + hasSuicided.toString()); sys.require(hasSuicided == false, 'invalid hasSuicided.'); const state = sys.hostApi.stateDb.stateAt(contract, hashKey); - sys.log('|||sate stateAt ' + uint8ArrayToHex(state)); + sys.log('|||state stateAt ' + uint8ArrayToHex(state)); sys.require(state.length > 0, 'failed to get state.'); } @@ -100,27 +120,28 @@ class ContextAspect const hashKey = sys.aspect.property.get('hashKey'); const nonce = sys.hostApi.stateDb.nonce(sender); - sys.log('|||sate nonce ' + nonce.toString()); - sys.require(nonce > 0, 'invalid nonce.'); + sys.log('|||state nonce ' + nonce.toString()); + sys.require(nonce > this.getTxNonce(), 'invalid nonce.'); const balance = sys.hostApi.stateDb.balance(contract); - const bigInt = BigInt.fromUint8Array(balance); - sys.log('|||sate balance ' + bigInt.toInt64().toString()); + const bigInt = Uint256.fromUint8Array(balance); + sys.log('|||state balance ' + bigInt.toInt64().toString()); sys.require(bigInt.toInt64() == 0, 'invalid balance.'); const codeSize = sys.hostApi.stateDb.codeSize(contract); - sys.log('|||sate codeSize ' + codeSize.toString()); - sys.require(codeSize > 0, 'invalid codeSize.'); + sys.log('|||state codeSize ' + codeSize.toString()); + sys.require(codeSize == sys.aspect.property.get('codeSize'), 'invalid codeSize.'); const codeHash = sys.hostApi.stateDb.codeHash(contract); sys.log('|||codeHash ' + uint8ArrayToHex(codeHash)); + sys.require(uint8ArrayToHex(codeHash) == sys.aspect.property.get('codeHash'), 'invalid hash.'); const hasSuicided = sys.hostApi.stateDb.hasSuicided(contract); sys.log('|||hasSuicided ' + hasSuicided.toString()); sys.require(hasSuicided == false, 'invalid hasSuicided.'); const state = sys.hostApi.stateDb.stateAt(contract, hashKey); - sys.log('|||sate stateAt ' + uint8ArrayToHex(state)); + sys.log('|||state stateAt ' + uint8ArrayToHex(state)); sys.require(state.length > 0, 'failed to get state.'); } @@ -131,27 +152,28 @@ class ContextAspect const hashKey = sys.aspect.property.get('hashKey'); const nonce = sys.hostApi.stateDb.nonce(sender); - sys.log('|||sate nonce ' + nonce.toString()); - sys.require(nonce > 0, 'invalid nonce.'); + sys.log('|||state nonce ' + nonce.toString()); + sys.require(nonce > this.getTxNonce(), 'invalid nonce.'); const balance = sys.hostApi.stateDb.balance(contract); - const bigInt = BigInt.fromUint8Array(balance); - sys.log('|||sate balance ' + bigInt.toInt64().toString()); + const bigInt = Uint256.fromUint8Array(balance); + sys.log('|||state balance ' + bigInt.toInt64().toString()); sys.require(bigInt.toInt64() == 0, 'invalid balance.'); const codeSize = sys.hostApi.stateDb.codeSize(contract); - sys.log('|||sate codeSize ' + codeSize.toString()); - sys.require(codeSize > 0, 'invalid codeSize.'); + sys.log('|||state codeSize ' + codeSize.toString()); + sys.require(codeSize == sys.aspect.property.get('codeSize'), 'invalid codeSize.'); const codeHash = sys.hostApi.stateDb.codeHash(contract); sys.log('|||codeHash ' + uint8ArrayToHex(codeHash)); + sys.require(uint8ArrayToHex(codeHash) == sys.aspect.property.get('codeHash'), 'invalid hash.'); const hasSuicided = sys.hostApi.stateDb.hasSuicided(contract); sys.log('|||hasSuicided ' + hasSuicided.toString()); sys.require(hasSuicided == false, 'invalid hasSuicided.'); const state = sys.hostApi.stateDb.stateAt(contract, hashKey); - sys.log('|||sate stateAt ' + uint8ArrayToHex(state)); + sys.log('|||state stateAt ' + uint8ArrayToHex(state)); sys.require(state.length > 0, 'failed to get state.'); } @@ -162,34 +184,35 @@ class ContextAspect const hashKey = sys.aspect.property.get('hashKey'); const nonce = sys.hostApi.stateDb.nonce(sender); - sys.log('|||sate nonce ' + nonce.toString()); - sys.require(nonce > 0, 'invalid nonce.'); + sys.log('|||state nonce ' + nonce.toString()); + sys.require(nonce > this.getTxNonce(), 'invalid nonce.'); const balance = sys.hostApi.stateDb.balance(contract); - const bigInt = BigInt.fromUint8Array(balance); - sys.log('|||sate balance ' + bigInt.toInt64().toString()); + const bigInt = Uint256.fromUint8Array(balance); + sys.log('|||state balance ' + bigInt.toInt64().toString()); sys.require(bigInt.toInt64() == 0, 'invalid balance.'); const codeSize = sys.hostApi.stateDb.codeSize(contract); - sys.log('|||sate codeSize ' + codeSize.toString()); - sys.require(codeSize > 0, 'invalid codeSize.'); + sys.log('|||state codeSize ' + codeSize.toString()); + sys.require(codeSize == sys.aspect.property.get('codeSize'), 'invalid codeSize.'); const codeHash = sys.hostApi.stateDb.codeHash(contract); sys.log('|||codeHash ' + uint8ArrayToHex(codeHash)); + sys.require(uint8ArrayToHex(codeHash) == sys.aspect.property.get('codeHash'), 'invalid hash.'); const hasSuicided = sys.hostApi.stateDb.hasSuicided(contract); sys.log('|||hasSuicided ' + hasSuicided.toString()); sys.require(hasSuicided == false, 'invalid hasSuicided.'); const state = sys.hostApi.stateDb.stateAt(contract, hashKey); - sys.log('|||sate stateAt ' + uint8ArrayToHex(state)); + sys.log('|||state stateAt ' + uint8ArrayToHex(state)); sys.require(state.length > 0, 'failed to get state.'); } } // 2.register aspect Instance -const aspect = new ContextAspect(); +const aspect = new StateDBAspect(); entryPoint.setAspect(aspect); // 3.must export it diff --git a/packages/testcases/aspect/static-call-aspect.ts b/packages/testcases/aspect/static-call-aspect.ts index 36ce74d..d66e84c 100644 --- a/packages/testcases/aspect/static-call-aspect.ts +++ b/packages/testcases/aspect/static-call-aspect.ts @@ -3,6 +3,7 @@ import { entryPoint, execute, IAspectOperation, + InitInput, IPostContractCallJP, IPostTxExecuteJP, IPreContractCallJP, @@ -28,6 +29,8 @@ class StaticCallAspect IPreContractCallJP, ITransactionVerifier, IAspectOperation { + init(input: InitInput): void { } + isOwner(sender: Uint8Array): bool { return true; } @@ -37,7 +40,7 @@ class StaticCallAspect const to = sys.aspect.property.get('to'); const data = sys.aspect.property.get('data'); - const staticCallRequest = new StaticCallRequest(from, to, data, 1000000000); + const staticCallRequest = new StaticCallRequest(from, to, data); const staticCallResult = sys.hostApi.evmCall.staticCall(staticCallRequest); const hex = uint8ArrayToHex(staticCallResult.ret); sys.require( @@ -54,7 +57,7 @@ class StaticCallAspect const to = sys.aspect.property.get('to'); const data = sys.aspect.property.get('data'); - const staticCallRequest = new StaticCallRequest(from, to, data, 1000000000); + const staticCallRequest = new StaticCallRequest(from, to, data, 1000000); const staticCallResult = sys.hostApi.evmCall.staticCall(staticCallRequest); const hex = uint8ArrayToHex(staticCallResult.ret); sys.require( @@ -71,7 +74,7 @@ class StaticCallAspect const to = sys.aspect.property.get('to'); const data = sys.aspect.property.get('data'); - const staticCallRequest = new StaticCallRequest(from, to, data, 1000000000); + const staticCallRequest = new StaticCallRequest(from, to, data); const staticCallResult = sys.hostApi.evmCall.staticCall(staticCallRequest); const hex = uint8ArrayToHex(staticCallResult.ret); @@ -90,7 +93,7 @@ class StaticCallAspect const to = sys.aspect.property.get('to'); const data = sys.aspect.property.get('data'); - const staticCallRequest = new StaticCallRequest(from, to, data, 1000000000); + const staticCallRequest = new StaticCallRequest(from, to, data); const staticCallResult = sys.hostApi.evmCall.staticCall(staticCallRequest); const hex = uint8ArrayToHex(staticCallResult.ret); sys.require( @@ -107,7 +110,7 @@ class StaticCallAspect const to = sys.aspect.property.get('to'); const data = sys.aspect.property.get('data'); - const staticCallRequest = new StaticCallRequest(from, to, data, 1000000000); + const staticCallRequest = new StaticCallRequest(from, to, data); const staticCallResult = sys.hostApi.evmCall.staticCall(staticCallRequest); sys.log('||| verifyTx staticCallResult.ret ' + staticCallResult.ret.toString()); @@ -121,7 +124,7 @@ class StaticCallAspect const to = sys.aspect.property.get('to'); const data = sys.aspect.property.get('data'); - const staticCallRequest = new StaticCallRequest(from, to, data, 1000000000); + const staticCallRequest = new StaticCallRequest(from, to, data); const staticCallResult = sys.hostApi.evmCall.staticCall(staticCallRequest); const hex = uint8ArrayToHex(staticCallResult.ret); diff --git a/packages/testcases/aspect/storage-aspect.ts b/packages/testcases/aspect/storage-aspect.ts index 0221a28..aedae9f 100644 --- a/packages/testcases/aspect/storage-aspect.ts +++ b/packages/testcases/aspect/storage-aspect.ts @@ -2,6 +2,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostContractCallJP, IPostTxExecuteJP, IPreContractCallJP, @@ -17,6 +18,8 @@ import { class StoreAspect implements IPostTxExecuteJP, IPreTxExecuteJP, IPostContractCallJP, IPreContractCallJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); diff --git a/packages/testcases/aspect/stress-test.ts b/packages/testcases/aspect/stress-test.ts index 9ca7aa6..16ab59a 100644 --- a/packages/testcases/aspect/stress-test.ts +++ b/packages/testcases/aspect/stress-test.ts @@ -8,6 +8,7 @@ import { ethereum, execute, hexToUint8Array, + InitInput, JitCallBuilder, MessageUtil, PostContractCallInput, @@ -24,6 +25,8 @@ import { } from '@artela/aspect-libs/types/aspect-interface'; class StressTestAspect implements IPreContractCallJP, IPostContractCallJP { + init(input: InitInput): void {} + preContractCall(ctx: PreContractCallInput): void { /// /// utils hostapi @@ -120,12 +123,11 @@ class StressTestAspect implements IPreContractCallJP, IPostContractCallJP { const callTreeQuery = new CallTreeQuery(-1); const queryCallTree = sys.hostApi.trace.queryCallTree(callTreeQuery); const ethCallTree = Protobuf.decode(queryCallTree, EthCallTree.decode); - var size = ethCallTree.calls.size; - var arrayKeys = ethCallTree.calls.keys(); + sys.aspect.mutableState.get('dummy').set(queryCallTree); + var size = ethCallTree.calls.length; for (let i = 0; i < size; i++) { - var key = arrayKeys[i]; - var oneCall = ethCallTree.calls.get(key); + var oneCall = ethCallTree.calls[i]; const parentCallMethod = ethereum.parseMethodSig(oneCall.data); if (noReentrantMethods.includes(parentCallMethod)) { // If yes, revert the transaction. diff --git a/packages/testcases/aspect/test-aspect.ts b/packages/testcases/aspect/test-aspect.ts index 5dcc2cd..f44bfc3 100644 --- a/packages/testcases/aspect/test-aspect.ts +++ b/packages/testcases/aspect/test-aspect.ts @@ -1,7 +1,7 @@ import { allocate, AspectBase, entryPoint, - execute, OperationInput, PostContractCallInput, + execute, InitInput, OperationInput, PostContractCallInput, PostTxExecuteInput, PreContractCallInput, PreTxExecuteInput, stringToUint8Array, sys, TxVerifyInput, @@ -10,6 +10,8 @@ import { class StoreAspect extends AspectBase { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { return true } diff --git a/packages/testcases/aspect/transient-storage.ts b/packages/testcases/aspect/transient-storage.ts new file mode 100644 index 0000000..577e8ca --- /dev/null +++ b/packages/testcases/aspect/transient-storage.ts @@ -0,0 +1,87 @@ +// The entry file of your WebAssembly module. + +import { + allocate, + BigInt, + entryPoint, + execute, + hexToUint8Array, + IAspectOperation, + InitInput, + IPostContractCallJP, + IPostTxExecuteJP, + IPreContractCallJP, + IPreTxExecuteJP, + OperationInput, + PostContractCallInput, + PostTxExecuteInput, + PreContractCallInput, + PreTxExecuteInput, + stringToUint8Array, + sys, + uint8ArrayToHex, +} from '@artela/aspect-libs'; + +// Dummy Aspect that does not do anything, just used to test the aspect basic features. +class TransientStorageAspect + implements + IAspectOperation, + IPreContractCallJP, + IPostContractCallJP, + IPreTxExecuteJP, + IPostTxExecuteJP +{ + init(input: InitInput): void { + sys.aspect.mutableState.get('owner').set(input.tx!.from); + } + + isOwner(addr: Uint8Array): bool { + return uint8ArrayToHex(sys.aspect.mutableState.get('owner').unwrap()) == uint8ArrayToHex(addr); + } + + operation(_: OperationInput): Uint8Array { + return stringToUint8Array(sys.aspect.mutableState.get('context').unwrap()); + } + + preTxExecute(_: PreTxExecuteInput): void { + sys.require(this.getData() == '', 'preTxExecute pre-check failed'); + this.appendData('1'); + sys.require(this.getData() == '1', 'preTxExecute post-check failed'); + } + + preContractCall(_: PreContractCallInput): void { + sys.require(this.getData() == '1', 'preContractCall pre-check failed'); + this.appendData('2'); + sys.require(this.getData() == '12', 'preContractCall post-check failed'); + } + + postContractCall(_: PostContractCallInput): void { + sys.require(this.getData() == '12', 'postContractCall pre-check failed'); + this.appendData('3'); + sys.require(this.getData() == '123', 'postContractCall post-check failed'); + } + + postTxExecute(_: PostTxExecuteInput): void { + sys.require(this.getData() == '123', 'postTxExecute pre-check failed'); + this.appendData('4'); + sys.require(this.getData() == '1234', 'postTxExecute post-check failed'); + } + + appendData(data: string): void { + const storage = sys.aspect.transientStorage.get('context'); + storage.set(storage.unwrap() + data); + } + + getData(): string { + const storage = sys.aspect.transientStorage.get('context'); + return storage.unwrap(); + } +} + +// 2.register aspect Instance +const aspect = new TransientStorageAspect(); +entryPoint.setOperationAspect(aspect); +entryPoint.setAspect(aspect); + +// 3.must export it +export { execute, allocate }; diff --git a/packages/testcases/aspect/type-check-aspect.ts b/packages/testcases/aspect/type-check-aspect.ts index da5adf1..795518b 100644 --- a/packages/testcases/aspect/type-check-aspect.ts +++ b/packages/testcases/aspect/type-check-aspect.ts @@ -3,6 +3,7 @@ import { BigInt, entryPoint, execute, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, PostTxExecuteInput, @@ -14,6 +15,8 @@ import { } from '@artela/aspect-libs'; class TypeCheckAspect implements IPostTxExecuteJP, IPreTxExecuteJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get('owner'); return !!uint8ArrayToHex(value).includes(uint8ArrayToString(sender)); diff --git a/packages/testcases/aspect/upgrade-test-aspect.ts b/packages/testcases/aspect/upgrade-test-aspect.ts index fd2cc25..32e64d6 100644 --- a/packages/testcases/aspect/upgrade-test-aspect.ts +++ b/packages/testcases/aspect/upgrade-test-aspect.ts @@ -2,6 +2,7 @@ import { allocate, entryPoint, execute, + InitInput, IPostTxExecuteJP, IPreTxExecuteJP, PostTxExecuteInput, @@ -12,6 +13,8 @@ import { class UpgradeTestAspect implements IPostTxExecuteJP, IPreTxExecuteJP { + init(input: InitInput): void {} + isOwner(sender: Uint8Array): bool { const value = sys.aspect.property.get("owner"); return uint8ArrayToHex(value).includes(uint8ArrayToHex(sender)); diff --git a/packages/testcases/aspect/verify-aspect.ts b/packages/testcases/aspect/verifier.ts similarity index 71% rename from packages/testcases/aspect/verify-aspect.ts rename to packages/testcases/aspect/verifier.ts index 367504f..5e77421 100644 --- a/packages/testcases/aspect/verify-aspect.ts +++ b/packages/testcases/aspect/verifier.ts @@ -1,4 +1,4 @@ -import { allocate, entryPoint, execute, sys, TxVerifyInput } from '@artela/aspect-libs'; +import { allocate, entryPoint, execute, InitInput, sys, TxVerifyInput, uint8ArrayToHex } from '@artela/aspect-libs'; import { ITransactionVerifier } from '@artela/aspect-libs/types/aspect-interface'; /** @@ -10,9 +10,13 @@ import { ITransactionVerifier } from '@artela/aspect-libs/types/aspect-interface * You can implement corresponding interfaces: IAspectTransaction, IAspectBlock,IAspectOperation or both to tell Artela which * type of Aspect you are implementing. */ -class Aspect implements ITransactionVerifier { +class VerifierAspect implements ITransactionVerifier { + init(input: InitInput): void { + sys.aspect.mutableState.get('owner').set(input.tx!.from); + } + verifyTx(input: TxVerifyInput): Uint8Array { - return sys.aspect.property.get('verifyAccount'); + return sys.aspect.mutableState.get('owner').unwrap(); } /** @@ -25,13 +29,12 @@ class Aspect implements ITransactionVerifier { * @return true if check success, false if check fail */ isOwner(sender: Uint8Array): bool { - // always return false on isOwner can make the Aspect immutable - return true; + return uint8ArrayToHex(sys.aspect.mutableState.get('owner').unwrap()) == uint8ArrayToHex(sender); } } // 2.register aspect Instance -const aspect = new Aspect(); +const aspect = new VerifierAspect(); entryPoint.setAspect(aspect); // 3.must export it diff --git a/packages/testcases/build.sh b/packages/testcases/build.sh index 6934e12..90934ed 100644 --- a/packages/testcases/build.sh +++ b/packages/testcases/build.sh @@ -1,5 +1,4 @@ -#bash - +#!/bin/bash asc_build() { # obtain parameter 1 @@ -9,7 +8,7 @@ asc_build() { # check if the file exists if [ -e "$file_path" ]; then fileName=$(basename $file_path .ts) - ./node_modules/assemblyscript/bin/asc.js $file_path --outFile ./build/${fileName}.wasm --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__ + ./node_modules/assemblyscript/bin/asc.js $file_path --outFile ./build/${fileName}.wasm --target release --disable bulk-memory -O3 --debug --runtime stub --exportRuntime --exportStart __aspect_start__ echo "ok $file_path ./build/${fileName}.wasm " fi } diff --git a/packages/testcases/contracts/Caller.sol b/packages/testcases/contracts/Caller.sol new file mode 100644 index 0000000..c024fd6 --- /dev/null +++ b/packages/testcases/contracts/Caller.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +contract CallerContract { + // Event to record call details + event CallMade(address target, bytes data, bool success, string returnData); + + /** + * @dev Call function to invoke another contract + * @param target The target contract address + * @param data The call data to send + */ + function call(address target, bytes memory data) public { + require(target != address(0), "Invalid target address"); + + try this.externalCall(target, data) returns (bool success, bytes memory returnDataBytes) { + // Unpack return data to string + string memory returnData = _bytesToString(returnDataBytes); + + // Trigger event to record call details + emit CallMade(target, data, success, returnData); + + // Revert the transaction if the call failed + require(success, returnData); + } catch (bytes memory reason) { + // Unpack error data to string + string memory errorMessage = _getRevertMsg(reason); + + // Trigger event to record call failure + emit CallMade(target, data, false, errorMessage); + revert(errorMessage); + } + } + + /** + * @dev Internal function to perform the external call + * @param target The target contract address + * @param data The call data to send + * @return success Whether the call was successful + * @return returnData The returned data from the call + */ + function externalCall(address target, bytes memory data) external returns (bool success, bytes memory returnData) { + (success, returnData) = target.call(data); + } + + /** + * @dev Internal function to convert bytes to string + * @param data The bytes data to convert + * @return The converted string + */ + function _bytesToString(bytes memory data) internal pure returns (string memory) { + return string(data); + } + + /** + * @dev Internal function to decode revert reason + * @param _returnData The bytes data containing the revert reason + * @return The decoded revert reason string + */ + function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { + // If the _returnData length is less than 68, then the transaction failed silently (without a revert message) + if (_returnData.length < 68) return "Transaction reverted silently"; + + assembly { + // Slice the sighash + _returnData := add(_returnData, 0x04) + } + return abi.decode(_returnData, (string)); + } +} diff --git a/packages/testcases/contracts/Counter.sol b/packages/testcases/contracts/Counter.sol new file mode 100644 index 0000000..213cdc4 --- /dev/null +++ b/packages/testcases/contracts/Counter.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity >=0.7.0 <0.9.0; + +contract Counter { + address private deployer; + + uint256 public count; + + constructor() { + deployer = msg.sender; + } + + function isOwner(address user) external view returns (bool result) { + return user == deployer; + } + + function add(uint256 num) public { + count += num; + } + + function increase() public { + add(1); + } +} \ No newline at end of file diff --git a/packages/testcases/contracts/HoneyPotAttack.sol b/packages/testcases/contracts/HoneyPotAttack.sol new file mode 100644 index 0000000..4daabfc --- /dev/null +++ b/packages/testcases/contracts/HoneyPotAttack.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.8.2 <0.9.0; + +contract HoneyPot { + mapping(address => uint256) public balances; + address private deployer; + constructor() { + deployer = msg.sender; + } + function isOwner(address user) external view returns (bool result) { + if (user == deployer) { + return true; + } else { + return false; + } + } + + function deposit() public payable { + balances[msg.sender] += msg.value; + } + + function withdraw() public { + uint bal = balances[msg.sender]; + require(bal > 0); + + (bool sent,) = msg.sender.call{value: bal}(""); + require(sent, "Failed to send Ether"); + address sender = msg.sender; + balances[sender] = 0; + } +} + +contract Attack { + HoneyPot public honeyPot; + + constructor(address _depositFundsAddress) { + honeyPot = HoneyPot(_depositFundsAddress); + } + + function attack() external payable { + honeyPot.withdraw(); + } + + function deposit() external payable { + require(msg.value >= 0.1 ether); + honeyPot.deposit{value: 0.1 ether}(); + } + + receive() external payable { + if (address(honeyPot).balance >= 0.1 ether) { + honeyPot.withdraw(); + } + } +} \ No newline at end of file diff --git a/packages/testcases/contracts/Royale.sol b/packages/testcases/contracts/Royale.sol new file mode 100644 index 0000000..efe3a51 --- /dev/null +++ b/packages/testcases/contracts/Royale.sol @@ -0,0 +1,392 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +contract Royale { + uint8 public constant MAP_WIDTH = 10; + uint8 public constant MAP_HEIGHT = 10; + uint8 public constant TILE_COUNT = MAP_WIDTH * MAP_HEIGHT; + uint8 public constant PLAYER_COUNT = 10; + uint64 public constant MAX_ROOM_NUMBER = 10; + + enum Dir { + DOWN, + LEFT, + UP, + RIGHT + } + + struct Score { + address player; + uint256 score; + } + + struct Room { + address[PLAYER_COUNT] players; + // The game board, each tile is represented by a uint8 + // If the uint8 is 0, the tile is empty + // If the uint8 is non-zero, the tile is occupied by a player + uint8[TILE_COUNT] board; + uint256[PLAYER_COUNT] playerLastMoved; + } + + struct GameStatus { + // The player's score + uint256 score; + + // The game board, each tile is represented by a uint8 + uint8[TILE_COUNT] board; + } + + event Scored(address player, uint256 score); + + // Quick lookup for player's wallet owner + // key: player burnable address wallet address + // value: player's actual wallet address + mapping(address => address) public walletOwner; + + // Quick lookup for player's used burnable wallets + // this is just for dealing with some case that the indexing service failed to process event, + // so we can manually check the players scores + // key: player's actual wallet address + // value: array of player's burnable wallet addresses + mapping(address => address[]) public ownedWallets; + + // Quick lookup for player position in a room + // key: first 64 bit for room id, next 8 bit for player id + // value: player position tile number + mapping(uint128 => uint8) public playerPositions; + + // Quick lookup for player scores + // key: player address + // value: player score + mapping(address => uint256) public scores; + + // Quick lookup for the room that a player has joined + // key: player address + // value: room id + mapping(address => uint64) public playerRoomId; + + // Room info + // key: room id + // value: room info + Room[MAX_ROOM_NUMBER] private rooms; + + // Quick lookup for the player's address in a room + // key: [64 Bit Room ID][8 Bit Player RoomId][24 Bit Empty] + // value: player's actual address + mapping(uint128 => address) public playerRoomIdReverseIndex; + + // Quick lookup for the player's room id in a room + // key: [64 Bit Room ID][160 Bit Player Address] + // value: player's id in the room + mapping(uint256 => uint8) public playerRoomIdIndex; + + // owner of the contract + address private owner; + + // max room enabled + uint64 public maxRoomEnabled = 3; + + constructor() { + owner = msg.sender; + } + + function setMaxRoomEnabled(uint64 _maxRoomEnabled) public { + require(msg.sender == owner, "not owner"); + require(_maxRoomEnabled <= MAX_ROOM_NUMBER, "exceed max room number"); + maxRoomEnabled = _maxRoomEnabled; + } + + function isOwner(address user) external view returns (bool result) { + return user == owner; + } + + function join() public { + require(playerRoomId[msg.sender] == 0, "already joined another room"); + + // copy the storage to stack + (uint64 availableRoom, uint8 slot) = _getAvailableRoomAndSlot(); + require(availableRoom > 0 && slot > 0, "all rooms are full"); + + // join the available room + _join(availableRoom, slot); + } + + function getAvailableRoomAndSlot() public view returns (uint64 roomId, uint8 slot) { + return _getAvailableRoomAndSlot(); + } + + function _getAvailableRoomAndSlot() private view returns (uint64 roomId, uint8 slot) { + for (uint64 i = 0; i < MAX_ROOM_NUMBER; ++i) { + // find a room with empty slot + Room storage room = rooms[i]; + for (uint8 j = 0; j < maxRoomEnabled; ++j) { + // find a room with empty slot or with stale player + if (room.players[j] == address(0) || _isStale(room.playerLastMoved[j])) { + return (i + 1, j + 1); + } + } + } + return (0, 0); + } + + function _isStale(uint256 lastMovedTime) private view returns (bool) { + return (lastMovedTime + 15 minutes) < block.timestamp; + } + + function _join(uint64 roomId, uint8 slot) private { + // find an empty slot in the room + Room storage room = rooms[roomId - 1]; + address[PLAYER_COUNT] memory playersInRoom = room.players; + uint8 playerIdInRoom = 0; + + if (slot > 0) { + // slot specified, check if the slot is empty + require(slot <= PLAYER_COUNT, "invalid slot"); + address slotOccupant = playersInRoom[slot - 1]; + if (slotOccupant == address(0)) { + room.players[slot - 1] = msg.sender; + playerIdInRoom = slot; + } else if (_isStale(room.playerLastMoved[slot - 1])) { + // for the stale player, remove it first from the room + _removePlayerFromRoom(room, roomId, slot); + room.players[slot - 1] = msg.sender; + playerIdInRoom = slot; + } else { + revert("slot is occupied"); + } + } else { + // slot not specified, find an empty slot in the room + for (uint8 i = 0; i < PLAYER_COUNT; ++i) { + if (playersInRoom[i] == address(0)) { + room.players[i] = msg.sender; + playerIdInRoom = i + 1; + break; + } else if (_isStale(room.playerLastMoved[i])) { + // if the player hasn't moved for 1 minute, remove the player from the room + _removePlayerFromRoom(room, roomId, i + 1); + room.players[i] = msg.sender; + playerIdInRoom = i + 1; + break; + } + } + } + + // still cannot find a slot for the player + require(playerIdInRoom > 0, "room is full"); + + // join the room + playerRoomId[msg.sender] = roomId; + playerRoomIdIndex[buildPlayerAddressIndex(roomId, msg.sender)] = playerIdInRoom; + playerRoomIdReverseIndex[buildPlayerRoomIdIndex(roomId, playerIdInRoom)] = msg.sender; + + // This move will just assign a random position to the player, but not move it + _move(roomId, playerIdInRoom, Dir.UP); + } + + function buildPlayerRoomIdIndex(uint64 roomId, uint8 playerIdInRoom) private pure returns (uint128) { + return (uint128(roomId) << 64) | (uint128(playerIdInRoom) << 24); + } + + function buildPlayerAddressIndex(uint64 roomId, address playerAddress) private pure returns (uint256) { + return (uint256(roomId) << 192) | (uint256(uint160(playerAddress))); + } + + function generateRandomPosition(uint256 salt) private view returns (uint8) { + return uint8(uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, salt))) % TILE_COUNT) + 1; + } + + function registerWalletOwner(address ownerAddress) public { + walletOwner[msg.sender] = ownerAddress; + ownedWallets[ownerAddress].push(msg.sender); + } + + function getWalletOwner(address wallet) public view returns (address) { + return walletOwner[wallet]; + } + + function getOwnedWallets(address ownerAddress) public view returns (address[] memory) { + return ownedWallets[ownerAddress]; + } + + function getAllRooms() public view returns (Room[MAX_ROOM_NUMBER] memory) { + return rooms; + } + + function resetAllRooms() public { + // just in case if there is some bug we cannot fix, or all rooms are occupied by zombies + require(msg.sender == owner, "not owner"); + for (uint64 i = 0; i < MAX_ROOM_NUMBER; ++i) { + _resetRoom(i + 1); + } + } + + function resetRoom(uint64 roomId) public { + // just in case if there is some bug we cannot fix, or a single room are occupied by zombies + require(msg.sender == owner, "not owner"); + require(roomId <= MAX_ROOM_NUMBER && roomId > 0, "invalid room id"); + + _resetRoom(roomId); + } + + function _resetRoom(uint64 roomId) private { + Room storage room = rooms[roomId - 1]; + for (uint8 i = 0; i < PLAYER_COUNT; ++i) { + address player = room.players[i]; + if (player != address(0)) { + _removePlayerFromRoom(room, roomId, i + 1); + } + } + delete room.players; + delete room.board; + delete room.playerLastMoved; + } + + function _move(uint64 roomId, uint8 playerIdInRoom, Dir dir) private { + uint128 playerRoomIdIndexKey = buildPlayerRoomIdIndex(roomId, playerIdInRoom); + uint8 currentPosition = playerPositions[playerRoomIdIndexKey]; + Room storage room = rooms[roomId - 1]; + room.playerLastMoved[playerIdInRoom - 1] = block.timestamp; + uint8[TILE_COUNT] storage board = room.board; + if (currentPosition == 0) { + // Assign a random position if the player doesn't exist on the board + uint256 salt = 0; + uint8 newPosition = generateRandomPosition(salt++); + while (board[newPosition - 1] != 0) { + // Keep generating a new position until we find an empty tile + newPosition = generateRandomPosition(salt++); + } + playerPositions[playerRoomIdIndexKey] = newPosition; + board[newPosition - 1] = playerIdInRoom; + } else { + // Calculate new position based on direction + uint8 newPosition = calculateNewPosition(currentPosition, dir); + if (currentPosition == newPosition) { + // if the new position is the same as the current position, do nothing + return; + } + + // if the tile was occupied, remove the previous occupant + uint8 tileOccupant = board[newPosition - 1]; + if (tileOccupant != 0) { + // remove the previous occupant out of the board and room + _removePlayerFromRoom(room, roomId, tileOccupant); + + // update the killer's score and emit event + emit Scored(walletOwner[msg.sender], ++scores[msg.sender]); + } + + // set the player to the new position + board[currentPosition - 1] = 0; + board[newPosition - 1] = playerIdInRoom; + playerPositions[playerRoomIdIndexKey] = newPosition; + } + } + + function _removePlayerFromRoom(Room storage room, uint64 roomId, uint8 playerIdInRoom) private { + uint128 playerRoomIdIndexKey = buildPlayerRoomIdIndex(roomId, playerIdInRoom); + uint8 playerPosition = playerPositions[playerRoomIdIndexKey]; + delete playerPositions[playerRoomIdIndexKey]; + delete room.players[playerIdInRoom - 1]; + delete room.board[playerPosition - 1]; + delete room.playerLastMoved[playerIdInRoom - 1]; + address playerAddress = playerRoomIdReverseIndex[playerRoomIdIndexKey]; + delete playerRoomIdReverseIndex[playerRoomIdIndexKey]; + delete playerRoomIdIndex[buildPlayerAddressIndex(roomId, playerAddress)]; + delete playerRoomId[playerAddress]; + } + + function move(uint64 roomId, Dir dir) public { + require(roomId <= maxRoomEnabled && roomId > 0, "invalid room id"); + + uint64 joinedRoom = playerRoomId[msg.sender]; + require(joinedRoom == 0 || roomId == joinedRoom, "already joined another room"); + if (joinedRoom == 0) { + // join the given room if not joined + // note this might fail if the room is full + _join(roomId, 0); + } else { + // move the player + uint8 playerIdInRoom = playerRoomIdIndex[buildPlayerAddressIndex(roomId, msg.sender)]; + _move(roomId, playerIdInRoom, dir); + } + } + + function getJoinedRoom() public view returns (uint64) { + return playerRoomId[msg.sender]; + } + + function getGameStatus() public view returns (GameStatus memory) { + uint64 roomId = playerRoomId[msg.sender]; + if (roomId == 0) { + uint8[TILE_COUNT] memory board; + return GameStatus(scores[msg.sender], board); + } + return GameStatus(scores[msg.sender], rooms[roomId - 1].board); + } + + function getBoardByRoom(uint64 roomId) public view returns (uint8[TILE_COUNT] memory) { + require(roomId <= MAX_ROOM_NUMBER && roomId > 0, "invalid room id"); + return rooms[roomId - 1].board; + } + + function getMyPosition() public view returns (uint8) { + uint64 roomId = playerRoomId[msg.sender]; + if (roomId == 0) { + return 0; + } + uint8 playerIdInRoom = playerRoomIdIndex[buildPlayerAddressIndex(roomId, msg.sender)]; + uint128 playerRoomIdIndexKey = buildPlayerRoomIdIndex(roomId, playerIdInRoom); + return playerPositions[playerRoomIdIndexKey]; + } + + function getScore(address player) public view returns (uint256) { + return scores[player]; + } + + function calculateNewPosition( + uint8 currentPosition, + Dir dir + ) private pure returns (uint8) { + uint8 arrayPosition = currentPosition - 1; + + if (dir == Dir.DOWN) { + uint8 newPosition = arrayPosition + MAP_WIDTH; + return newPosition < TILE_COUNT ? (newPosition + 1) : currentPosition; + } else if (dir == Dir.LEFT) { + return arrayPosition % MAP_WIDTH == 0 ? currentPosition : currentPosition - 1; + } else if (dir == Dir.UP) { + return arrayPosition < MAP_WIDTH ? currentPosition : currentPosition - MAP_WIDTH; + } else if (dir == Dir.RIGHT) { + return (arrayPosition + 1) % MAP_WIDTH == 0 ? currentPosition : currentPosition + 1; + } + + return currentPosition; + } + + function getPlayerRoomId(address player) public view returns (uint64) { + return playerRoomId[player]; + } + + function getPlayerNumberInRoom(address player) public view returns (uint8) { + uint64 roomId = playerRoomId[player]; + if (roomId == 0) { + return 0; + } + uint8 playerIdInRoom = playerRoomIdIndex[buildPlayerAddressIndex(roomId, player)]; + return playerIdInRoom; + } + + function getPlayerByPosition( + uint64 roomId, + uint8 position + ) private view returns (address) { + uint8 playerIdInRoom = rooms[roomId].board[position]; + if (playerIdInRoom == 0) { + return address(0); + } + + uint128 playerRoomIdIndexKey = buildPlayerRoomIdIndex(roomId, playerIdInRoom); + return playerRoomIdReverseIndex[playerRoomIdIndexKey]; + } +} diff --git a/packages/testcases/contracts/SessionKey.sol b/packages/testcases/contracts/SessionKey.sol new file mode 100644 index 0000000..4c85a6d --- /dev/null +++ b/packages/testcases/contracts/SessionKey.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.8.2 <0.9.0; + +contract SessionKey { + uint256 private counter; + address private owner; + + constructor() { + owner = msg.sender; + } + function isOwner(address user) external view returns (bool result) { + return user == owner; + } + function add(uint256 number) public { + counter = counter + number; + } + function get() external view returns (uint256 result) { + return counter; + } + + // Vault Contract + // 存储每个地址的余额 + mapping(address => uint) public balances; + + // 充值事件 + event Deposit(address indexed sender, uint amount); + + // 取现事件 + event Withdraw(address indexed receiver, uint amount); + + // 充值函数 + function deposit() public payable { + require(msg.value > 0, "Deposit amount must be greater than 0"); + balances[msg.sender] += msg.value; + emit Deposit(msg.sender, msg.value); + } + + // 取现函数 + function withdraw(uint amount) public { + require(balances[msg.sender] >= amount, "Insufficient balance"); + balances[msg.sender] -= amount; + payable(msg.sender).transfer(amount); + emit Withdraw(msg.sender, amount); + } + + // 查询余额 + function getBalance() public view returns (uint) { + return balances[msg.sender]; + } + + // 查询余额 + function checkBalance(address acc) public view returns (uint) { + return balances[acc]; + } +} + diff --git a/packages/testcases/contracts/SimpleAccountFactory.sol b/packages/testcases/contracts/SimpleAccountFactory.sol new file mode 100644 index 0000000..7ccd745 --- /dev/null +++ b/packages/testcases/contracts/SimpleAccountFactory.sol @@ -0,0 +1,3048 @@ +// Sources flattened with hardhat v2.12.4 https://hardhat.org + +// File contracts/core/Helpers.sol + +// SPDX-License-Identifier: GPL-3.0-only AND GPL-3.0 AND MIT +pragma solidity ^0.8.12; + +/* solhint-disable no-inline-assembly */ + +/** + * Returned data from validateUserOp. + * validateUserOp returns a uint256, with is created by `_packedValidationData` and + * parsed by `_parseValidationData`. + * @param aggregator - address(0) - The account validated the signature by itself. + * address(1) - The account failed to validate the signature. + * otherwise - This is an address of a signature aggregator that must + * be used to validate the signature. + * @param validAfter - This UserOp is valid only after this timestamp. + * @param validaUntil - This UserOp is valid only up to this timestamp. + */ +struct ValidationData { + address aggregator; + uint48 validAfter; + uint48 validUntil; +} + +/** + * Extract sigFailed, validAfter, validUntil. + * Also convert zero validUntil to type(uint48).max. + * @param validationData - The packed validation data. + */ +function _parseValidationData( + uint validationData +) pure returns (ValidationData memory data) { + address aggregator = address(uint160(validationData)); + uint48 validUntil = uint48(validationData >> 160); + if (validUntil == 0) { + validUntil = type(uint48).max; + } + uint48 validAfter = uint48(validationData >> (48 + 160)); + return ValidationData(aggregator, validAfter, validUntil); +} + +/** + * Intersect account and paymaster ranges. + * @param validationData - The packed validation data of the account. + * @param paymasterValidationData - The packed validation data of the paymaster. + */ +function _intersectTimeRange( + uint256 validationData, + uint256 paymasterValidationData +) pure returns (ValidationData memory) { + ValidationData memory accountValidationData = _parseValidationData( + validationData + ); + ValidationData memory pmValidationData = _parseValidationData( + paymasterValidationData + ); + address aggregator = accountValidationData.aggregator; + if (aggregator == address(0)) { + aggregator = pmValidationData.aggregator; + } + uint48 validAfter = accountValidationData.validAfter; + uint48 validUntil = accountValidationData.validUntil; + uint48 pmValidAfter = pmValidationData.validAfter; + uint48 pmValidUntil = pmValidationData.validUntil; + + if (validAfter < pmValidAfter) validAfter = pmValidAfter; + if (validUntil > pmValidUntil) validUntil = pmValidUntil; + return ValidationData(aggregator, validAfter, validUntil); +} + +/** + * Helper to pack the return value for validateUserOp. + * @param data - The ValidationData to pack. + */ +function _packValidationData( + ValidationData memory data +) pure returns (uint256) { + return + uint160(data.aggregator) | + (uint256(data.validUntil) << 160) | + (uint256(data.validAfter) << (160 + 48)); +} + +/** + * Helper to pack the return value for validateUserOp, when not using an aggregator. + * @param sigFailed - True for signature failure, false for success. + * @param validUntil - Last timestamp this UserOperation is valid (or zero for infinite). + * @param validAfter - First timestamp this UserOperation is valid. + */ +function _packValidationData( + bool sigFailed, + uint48 validUntil, + uint48 validAfter +) pure returns (uint256) { + return + (sigFailed ? 1 : 0) | + (uint256(validUntil) << 160) | + (uint256(validAfter) << (160 + 48)); +} + +/** + * keccak function over calldata. + * @dev copy calldata into memory, do keccak and drop allocated memory. Strangely, this is more efficient than letting solidity do it. + */ + function calldataKeccak(bytes calldata data) pure returns (bytes32 ret) { + assembly { + let mem := mload(0x40) + let len := data.length + calldatacopy(mem, data.offset, len) + ret := keccak256(mem, len) + } + } + + +// File contracts/interfaces/UserOperation.sol + + +pragma solidity ^0.8.12; + +/* solhint-disable no-inline-assembly */ + +/** + * User Operation struct + * @param sender - The sender account of this request. + * @param nonce - Unique value the sender uses to verify it is not a replay. + * @param initCode - If set, the account contract will be created by this constructor/ + * @param callData - The method call to execute on this account. + * @param callGasLimit - The gas limit passed to the callData method call. + * @param verificationGasLimit - Gas used for validateUserOp and validatePaymasterUserOp. + * @param preVerificationGas - Gas not calculated by the handleOps method, but added to the gas paid. + * Covers batch overhead. + * @param maxFeePerGas - Same as EIP-1559 gas parameter. + * @param maxPriorityFeePerGas - Same as EIP-1559 gas parameter. + * @param paymasterAndData - If set, this field holds the paymaster address and paymaster-specific data. + * The paymaster will pay for the transaction instead of the sender. + * @param signature - Sender-verified signature over the entire request, the EntryPoint address and the chain ID. + */ +struct UserOperation { + address sender; + uint256 nonce; + bytes initCode; + bytes callData; + uint256 callGasLimit; + uint256 verificationGasLimit; + uint256 preVerificationGas; + uint256 maxFeePerGas; + uint256 maxPriorityFeePerGas; + bytes paymasterAndData; + bytes signature; +} + +/** + * Utility functions helpful when working with UserOperation structs. + */ +library UserOperationLib { + /** + * Get sender from user operation data. + * @param userOp - The user operation data. + */ + function getSender( + UserOperation calldata userOp + ) internal pure returns (address) { + address data; + //read sender from userOp, which is first userOp member (saves 800 gas...) + assembly { + data := calldataload(userOp) + } + return address(uint160(data)); + } + + /** + * Relayer/block builder might submit the TX with higher priorityFee, + * but the user should not pay above what he signed for. + * @param userOp - The user operation data. + */ + function gasPrice( + UserOperation calldata userOp + ) internal view returns (uint256) { + unchecked { + uint256 maxFeePerGas = userOp.maxFeePerGas; + uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas; + if (maxFeePerGas == maxPriorityFeePerGas) { + //legacy mode (for networks that don't support basefee opcode) + return maxFeePerGas; + } + return min(maxFeePerGas, maxPriorityFeePerGas + block.basefee); + } + } + + /** + * Pack the user operation data into bytes for hashing. + * @param userOp - The user operation data. + */ + function pack( + UserOperation calldata userOp + ) internal pure returns (bytes memory ret) { + address sender = getSender(userOp); + uint256 nonce = userOp.nonce; + bytes32 hashInitCode = calldataKeccak(userOp.initCode); + bytes32 hashCallData = calldataKeccak(userOp.callData); + uint256 callGasLimit = userOp.callGasLimit; + uint256 verificationGasLimit = userOp.verificationGasLimit; + uint256 preVerificationGas = userOp.preVerificationGas; + uint256 maxFeePerGas = userOp.maxFeePerGas; + uint256 maxPriorityFeePerGas = userOp.maxPriorityFeePerGas; + bytes32 hashPaymasterAndData = calldataKeccak(userOp.paymasterAndData); + + return abi.encode( + sender, nonce, + hashInitCode, hashCallData, + callGasLimit, verificationGasLimit, preVerificationGas, + maxFeePerGas, maxPriorityFeePerGas, + hashPaymasterAndData + ); + } + + /** + * Hash the user operation data. + * @param userOp - The user operation data. + */ + function hash( + UserOperation calldata userOp + ) internal pure returns (bytes32) { + return keccak256(pack(userOp)); + } + + /** + * The minimum of two numbers. + * @param a - First number. + * @param b - Second number. + */ + function min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } +} + + +// File contracts/interfaces/IStakeManager.sol + + +pragma solidity ^0.8.12; + +/** + * Manage deposits and stakes. + * Deposit is just a balance used to pay for UserOperations (either by a paymaster or an account). + * Stake is value locked for at least "unstakeDelay" by the staked entity. + */ +interface IStakeManager { + event Deposited(address indexed account, uint256 totalDeposit); + + event Withdrawn( + address indexed account, + address withdrawAddress, + uint256 amount + ); + + // Emitted when stake or unstake delay are modified. + event StakeLocked( + address indexed account, + uint256 totalStaked, + uint256 unstakeDelaySec + ); + + // Emitted once a stake is scheduled for withdrawal. + event StakeUnlocked(address indexed account, uint256 withdrawTime); + + event StakeWithdrawn( + address indexed account, + address withdrawAddress, + uint256 amount + ); + + /** + * @param deposit - The entity's deposit. + * @param staked - True if this entity is staked. + * @param stake - Actual amount of ether staked for this entity. + * @param unstakeDelaySec - Minimum delay to withdraw the stake. + * @param withdrawTime - First block timestamp where 'withdrawStake' will be callable, or zero if already locked. + * @dev Sizes were chosen so that (deposit,staked, stake) fit into one cell (used during handleOps) + * and the rest fit into a 2nd cell. + * - 112 bit allows for 10^15 eth + * - 48 bit for full timestamp + * - 32 bit allows 150 years for unstake delay + */ + struct DepositInfo { + uint112 deposit; + bool staked; + uint112 stake; + uint32 unstakeDelaySec; + uint48 withdrawTime; + } + + // API struct used by getStakeInfo and simulateValidation. + struct StakeInfo { + uint256 stake; + uint256 unstakeDelaySec; + } + + /** + * Get deposit info. + * @param account - The account to query. + * @return info - Full deposit information of given account. + */ + function getDepositInfo( + address account + ) external view returns (DepositInfo memory info); + + /** + * Get account balance. + * @param account - The account to query. + * @return - The deposit (for gas payment) of the account. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * Add to the deposit of the given account. + * @param account - The account to add to. + */ + function depositTo(address account) external payable; + + /** + * Add to the account's stake - amount and delay + * any pending unstake is first cancelled. + * @param _unstakeDelaySec - The new lock duration before the deposit can be withdrawn. + */ + function addStake(uint32 _unstakeDelaySec) external payable; + + /** + * Attempt to unlock the stake. + * The value can be withdrawn (using withdrawStake) after the unstake delay. + */ + function unlockStake() external; + + /** + * Withdraw from the (unlocked) stake. + * Must first call unlockStake and wait for the unstakeDelay to pass. + * @param withdrawAddress - The address to send withdrawn value. + */ + function withdrawStake(address payable withdrawAddress) external; + + /** + * Withdraw from the deposit. + * @param withdrawAddress - The address to send withdrawn value. + * @param withdrawAmount - The amount to withdraw. + */ + function withdrawTo( + address payable withdrawAddress, + uint256 withdrawAmount + ) external; +} + + +// File contracts/interfaces/IAggregator.sol + + +pragma solidity ^0.8.12; + +/** + * Aggregated Signatures validator. + */ +interface IAggregator { + /** + * Validate aggregated signature. + * Revert if the aggregated signature does not match the given list of operations. + * @param userOps - Array of UserOperations to validate the signature for. + * @param signature - The aggregated signature. + */ + function validateSignatures( + UserOperation[] calldata userOps, + bytes calldata signature + ) external view; + + /** + * Validate signature of a single userOp. + * This method is should be called by bundler after EntryPoint.simulateValidation() returns (reverts) with ValidationResultWithAggregation + * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps. + * @param userOp - The userOperation received from the user. + * @return sigForUserOp - The value to put into the signature field of the userOp when calling handleOps. + * (usually empty, unless account and aggregator support some kind of "multisig". + */ + function validateUserOpSignature( + UserOperation calldata userOp + ) external view returns (bytes memory sigForUserOp); + + /** + * Aggregate multiple signatures into a single value. + * This method is called off-chain to calculate the signature to pass with handleOps() + * bundler MAY use optimized custom code perform this aggregation. + * @param userOps - Array of UserOperations to collect the signatures from. + * @return aggregatedSignature - The aggregated signature. + */ + function aggregateSignatures( + UserOperation[] calldata userOps + ) external view returns (bytes memory aggregatedSignature); +} + + +// File contracts/interfaces/INonceManager.sol + + +pragma solidity ^0.8.12; + +interface INonceManager { + + /** + * Return the next nonce for this sender. + * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop) + * But UserOp with different keys can come with arbitrary order. + * + * @param sender the account address + * @param key the high 192 bit of the nonce + * @return nonce a full nonce to pass for next UserOp with this sender. + */ + function getNonce(address sender, uint192 key) + external view returns (uint256 nonce); + + /** + * Manually increment the nonce of the sender. + * This method is exposed just for completeness.. + * Account does NOT need to call it, neither during validation, nor elsewhere, + * as the EntryPoint will update the nonce regardless. + * Possible use-case is call it with various keys to "initialize" their nonces to one, so that future + * UserOperations will not pay extra for the first transaction with a given key. + */ + function incrementNonce(uint192 key) external; +} + + +// File contracts/interfaces/IEntryPoint.sol + +/** + ** Account-Abstraction (EIP-4337) singleton EntryPoint implementation. + ** Only one instance required on each chain. + **/ + +pragma solidity ^0.8.12; + +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable no-inline-assembly */ +/* solhint-disable reason-string */ + + + + +interface IEntryPoint is IStakeManager, INonceManager { + /*** + * An event emitted after each successful request. + * @param userOpHash - Unique identifier for the request (hash its entire content, except signature). + * @param sender - The account that generates this request. + * @param paymaster - If non-null, the paymaster that pays for this request. + * @param nonce - The nonce value from the request. + * @param success - True if the sender transaction succeeded, false if reverted. + * @param actualGasCost - Actual amount paid (by account or paymaster) for this UserOperation. + * @param actualGasUsed - Total gas used by this UserOperation (including preVerification, creation, + * validation and execution). + */ + event UserOperationEvent( + bytes32 indexed userOpHash, + address indexed sender, + address indexed paymaster, + uint256 nonce, + bool success, + uint256 actualGasCost, + uint256 actualGasUsed + ); + + /** + * Account "sender" was deployed. + * @param userOpHash - The userOp that deployed this account. UserOperationEvent will follow. + * @param sender - The account that is deployed + * @param factory - The factory used to deploy this account (in the initCode) + * @param paymaster - The paymaster used by this UserOp + */ + event AccountDeployed( + bytes32 indexed userOpHash, + address indexed sender, + address factory, + address paymaster + ); + + /** + * An event emitted if the UserOperation "callData" reverted with non-zero length. + * @param userOpHash - The request unique identifier. + * @param sender - The sender of this request. + * @param nonce - The nonce used in the request. + * @param revertReason - The return bytes from the (reverted) call to "callData". + */ + event UserOperationRevertReason( + bytes32 indexed userOpHash, + address indexed sender, + uint256 nonce, + bytes revertReason + ); + + /** + * An event emitted by handleOps(), before starting the execution loop. + * Any event emitted before this event, is part of the validation. + */ + event BeforeExecution(); + + /** + * Signature aggregator used by the following UserOperationEvents within this bundle. + * @param aggregator - The aggregator used for the following UserOperationEvents. + */ + event SignatureAggregatorChanged(address indexed aggregator); + + /** + * A custom revert error of handleOps, to identify the offending op. + * Should be caught in off-chain handleOps simulation and not happen on-chain. + * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts. + * NOTE: If simulateValidation passes successfully, there should be no reason for handleOps to fail on it. + * @param opIndex - Index into the array of ops to the failed one (in simulateValidation, this is always zero). + * @param reason - Revert reason. The string starts with a unique code "AAmn", + * where "m" is "1" for factory, "2" for account and "3" for paymaster issues, + * so a failure can be attributed to the correct entity. + */ + error FailedOp(uint256 opIndex, string reason); + + /** + * Error case when a signature aggregator fails to verify the aggregated signature it had created. + * @param aggregator The aggregator that failed to verify the signature + */ + error SignatureValidationFailed(address aggregator); + + /** + * Successful result from simulateValidation. + * @param returnInfo - Gas and time-range returned values. + * @param senderInfo - Stake information about the sender. + * @param factoryInfo - Stake information about the factory (if any). + * @param paymasterInfo - Stake information about the paymaster (if any). + */ + error ValidationResult( + ReturnInfo returnInfo, + StakeInfo senderInfo, + StakeInfo factoryInfo, + StakeInfo paymasterInfo + ); + + /** + * Successful result from simulateValidation, if the account returns a signature aggregator. + * @param returnInfo Gas and time-range returned values + * @param senderInfo Stake information about the sender + * @param factoryInfo Stake information about the factory (if any) + * @param paymasterInfo Stake information about the paymaster (if any) + * @param aggregatorInfo Signature aggregation info (if the account requires signature aggregator) + * Bundler MUST use it to verify the signature, or reject the UserOperation. + */ + error ValidationResultWithAggregation( + ReturnInfo returnInfo, + StakeInfo senderInfo, + StakeInfo factoryInfo, + StakeInfo paymasterInfo, + AggregatorStakeInfo aggregatorInfo + ); + + // Return value of getSenderAddress. + error SenderAddressResult(address sender); + + // Return value of simulateHandleOp. + error ExecutionResult( + uint256 preOpGas, + uint256 paid, + uint48 validAfter, + uint48 validUntil, + bool targetSuccess, + bytes targetResult + ); + + // UserOps handled, per aggregator. + struct UserOpsPerAggregator { + UserOperation[] userOps; + // Aggregator address + IAggregator aggregator; + // Aggregated signature + bytes signature; + } + + /** + * Execute a batch of UserOperations. + * No signature aggregator is used. + * If any account requires an aggregator (that is, it returned an aggregator when + * performing simulateValidation), then handleAggregatedOps() must be used instead. + * @param ops - The operations to execute. + * @param beneficiary - The address to receive the fees. + */ + function handleOps( + UserOperation[] calldata ops, + address payable beneficiary + ) external; + + /** + * Execute a batch of UserOperation with Aggregators + * @param opsPerAggregator - The operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts). + * @param beneficiary - The address to receive the fees. + */ + function handleAggregatedOps( + UserOpsPerAggregator[] calldata opsPerAggregator, + address payable beneficiary + ) external; + + /** + * Generate a request Id - unique identifier for this request. + * The request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid. + * @param userOp - The user operation to generate the request ID for. + */ + function getUserOpHash( + UserOperation calldata userOp + ) external view returns (bytes32); + + /** + * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp. + * @dev This method always reverts. Successful result is ValidationResult error. other errors are failures. + * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage + * outside the account's data. + * @param userOp - The user operation to validate. + */ + function simulateValidation(UserOperation calldata userOp) external; + + /** + * Gas and return values during simulation. + * @param preOpGas - The gas used for validation (including preValidationGas) + * @param prefund - The required prefund for this operation + * @param sigFailed - ValidateUserOp's (or paymaster's) signature check failed + * @param validAfter - First timestamp this UserOp is valid (merging account and paymaster time-range) + * @param validUntil - Last timestamp this UserOp is valid (merging account and paymaster time-range) + * @param paymasterContext - Returned by validatePaymasterUserOp (to be passed into postOp) + */ + struct ReturnInfo { + uint256 preOpGas; + uint256 prefund; + bool sigFailed; + uint48 validAfter; + uint48 validUntil; + bytes paymasterContext; + } + + /** + * Returned aggregated signature info: + * The aggregator returned by the account, and its current stake. + */ + struct AggregatorStakeInfo { + address aggregator; + StakeInfo stakeInfo; + } + + /** + * Get counterfactual sender address. + * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation. + * This method always revert, and returns the address in SenderAddressResult error + * @param initCode - The constructor code to be passed into the UserOperation. + */ + function getSenderAddress(bytes memory initCode) external; + + /** + * Simulate full execution of a UserOperation (including both validation and target execution) + * This method will always revert with "ExecutionResult". + * It performs full validation of the UserOperation, but ignores signature error. + * An optional target address is called after the userop succeeds, + * and its value is returned (before the entire call is reverted). + * Note that in order to collect the the success/failure of the target call, it must be executed + * with trace enabled to track the emitted events. + * @param op The UserOperation to simulate. + * @param target - If nonzero, a target address to call after userop simulation. If called, + * the targetSuccess and targetResult are set to the return from that call. + * @param targetCallData - CallData to pass to target address. + */ + function simulateHandleOp( + UserOperation calldata op, + address target, + bytes calldata targetCallData + ) external; +} + + +// File contracts/interfaces/IAccount.sol + + +pragma solidity ^0.8.12; + +interface IAccount { + /** + * Validate user's signature and nonce + * the entryPoint will make the call to the recipient only if this validation call returns successfully. + * signature failure should be reported by returning SIG_VALIDATION_FAILED (1). + * This allows making a "simulation call" without a valid signature + * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure. + * + * @dev Must validate caller is the entryPoint. + * Must validate the signature and nonce + * @param userOp - The operation that is about to be executed. + * @param userOpHash - Hash of the user's request data. can be used as the basis for signature. + * @param missingAccountFunds - Missing funds on the account's deposit in the entrypoint. + * This is the minimum amount to transfer to the sender(entryPoint) to be + * able to make the call. The excess is left as a deposit in the entrypoint + * for future calls. Can be withdrawn anytime using "entryPoint.withdrawTo()". + * In case there is a paymaster in the request (or the current deposit is high + * enough), this value will be zero. + * @return validationData - Packaged ValidationData structure. use `_packValidationData` and + * `_unpackValidationData` to encode and decode. + * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, + * otherwise, an address of an "authorizer" contract. + * <6-byte> validUntil - Last timestamp this operation is valid. 0 for "indefinite" + * <6-byte> validAfter - First timestamp this operation is valid + * If an account doesn't use time-range, it is enough to + * return SIG_VALIDATION_FAILED value (1) for signature failure. + * Note that the validation code cannot use block.timestamp (or block.number) directly. + */ + function validateUserOp( + UserOperation calldata userOp, + bytes32 userOpHash, + uint256 missingAccountFunds + ) external returns (uint256 validationData); +} + + +// File contracts/core/BaseAccount.sol + + +pragma solidity ^0.8.12; + +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable no-empty-blocks */ + + + +/** + * Basic account implementation. + * This contract provides the basic logic for implementing the IAccount interface - validateUserOp + * Specific account implementation should inherit it and provide the account-specific logic. + */ +abstract contract BaseAccount is IAccount { + using UserOperationLib for UserOperation; + + /** + * Return value in case of signature failure, with no time-range. + * Equivalent to _packValidationData(true,0,0). + */ + uint256 internal constant SIG_VALIDATION_FAILED = 1; + + /** + * Return the account nonce. + * This method returns the next sequential nonce. + * For a nonce of a specific key, use `entrypoint.getNonce(account, key)` + */ + function getNonce() public view virtual returns (uint256) { + return entryPoint().getNonce(address(this), 0); + } + + /** + * Return the entryPoint used by this account. + * Subclass should return the current entryPoint used by this account. + */ + function entryPoint() public view virtual returns (IEntryPoint); + + /** + * Validate user's signature and nonce. + * Subclass doesn't need to override this method. Instead, + * it should override the specific internal validation methods. + * @param userOp - The user operation to validate. + * @param userOpHash - The hash of the user operation. + * @param missingAccountFunds - The amount of funds missing from the account + * to pay for the user operation. + */ + function validateUserOp( + UserOperation calldata userOp, + bytes32 userOpHash, + uint256 missingAccountFunds + ) external virtual override returns (uint256 validationData) { + _requireFromEntryPoint(); + validationData = _validateSignature(userOp, userOpHash); + _validateNonce(userOp.nonce); + _payPrefund(missingAccountFunds); + } + + /** + * Ensure the request comes from the known entrypoint. + */ + function _requireFromEntryPoint() internal view virtual { + require( + msg.sender == address(entryPoint()), + "account: not from EntryPoint" + ); + } + + /** + * Validate the signature is valid for this message. + * @param userOp - Validate the userOp.signature field. + * @param userOpHash - Convenient field: the hash of the request, to check the signature against. + * (also hashes the entrypoint and chain id) + * @return validationData - Signature and time-range of this operation. + * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, + * otherwise, an address of an "authorizer" contract. + * <6-byte> validUntil - last timestamp this operation is valid. 0 for "indefinite" + * <6-byte> validAfter - first timestamp this operation is valid + * If the account doesn't use time-range, it is enough to return + * SIG_VALIDATION_FAILED value (1) for signature failure. + * Note that the validation code cannot use block.timestamp (or block.number) directly. + */ + function _validateSignature( + UserOperation calldata userOp, + bytes32 userOpHash + ) internal virtual returns (uint256 validationData); + + /** + * Validate the nonce of the UserOperation. + * This method may validate the nonce requirement of this account. + * e.g. + * To limit the nonce to use sequenced UserOps only (no "out of order" UserOps): + * `require(nonce < type(uint64).max)` + * For a hypothetical account that *requires* the nonce to be out-of-order: + * `require(nonce & type(uint64).max == 0)` + * + * The actual nonce uniqueness is managed by the EntryPoint, and thus no other + * action is needed by the account itself. + * + * @param nonce to validate + * + * solhint-disable-next-line no-empty-blocks + */ + function _validateNonce(uint256 nonce) internal view virtual { + } + + /** + * Sends to the entrypoint (msg.sender) the missing funds for this transaction. + * SubClass MAY override this method for better funds management + * (e.g. send to the entryPoint more than the minimum required, so that in future transactions + * it will not be required to send again). + * @param missingAccountFunds - The minimum value this method should send the entrypoint. + * This value MAY be zero, in case there is enough deposit, + * or the userOp has a paymaster. + */ + function _payPrefund(uint256 missingAccountFunds) internal virtual { + if (missingAccountFunds != 0) { + (bool success, ) = payable(msg.sender).call{ + value: missingAccountFunds, + gas: type(uint256).max + }(""); + (success); + //ignore failure (its EntryPoint's job to verify, not account.) + } + } +} + + +// File @openzeppelin/contracts/utils/introspection/IERC165.sol@v4.8.0 + + +// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Interface of the ERC165 standard, as defined in the + * https://eips.ethereum.org/EIPS/eip-165[EIP]. + * + * Implementers can declare support of contract interfaces, which can then be + * queried by others ({ERC165Checker}). + * + * For an implementation, see {ERC165}. + */ +interface IERC165 { + /** + * @dev Returns true if this contract implements the interface defined by + * `interfaceId`. See the corresponding + * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] + * to learn more about how these ids are created. + * + * This function call must use less than 30 000 gas. + */ + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} + + +// File @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) + +pragma solidity ^0.8.0; + +/** + * @dev _Available since v3.1._ + */ +interface IERC1155Receiver is IERC165 { + /** + * @dev Handles the receipt of a single ERC1155 token type. This function is + * called at the end of a `safeTransferFrom` after the balance has been updated. + * + * NOTE: To accept the transfer, this must return + * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` + * (i.e. 0xf23a6e61, or its own function selector). + * + * @param operator The address which initiated the transfer (i.e. msg.sender) + * @param from The address which previously owned the token + * @param id The ID of the token being transferred + * @param value The amount of tokens being transferred + * @param data Additional data with no specified format + * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed + */ + function onERC1155Received( + address operator, + address from, + uint256 id, + uint256 value, + bytes calldata data + ) external returns (bytes4); + + /** + * @dev Handles the receipt of a multiple ERC1155 token types. This function + * is called at the end of a `safeBatchTransferFrom` after the balances have + * been updated. + * + * NOTE: To accept the transfer(s), this must return + * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` + * (i.e. 0xbc197c81, or its own function selector). + * + * @param operator The address which initiated the batch transfer (i.e. msg.sender) + * @param from The address which previously owned the token + * @param ids An array containing ids of each token being transferred (order and length must match values array) + * @param values An array containing amounts of each token being transferred (order and length must match ids array) + * @param data Additional data with no specified format + * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed + */ + function onERC1155BatchReceived( + address operator, + address from, + uint256[] calldata ids, + uint256[] calldata values, + bytes calldata data + ) external returns (bytes4); +} + + +// File @openzeppelin/contracts/token/ERC777/IERC777Recipient.sol@v4.8.0 + + +// OpenZeppelin Contracts v4.4.1 (token/ERC777/IERC777Recipient.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP. + * + * Accounts can be notified of {IERC777} tokens being sent to them by having a + * contract implement this interface (contract holders can be their own + * implementer) and registering it on the + * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. + * + * See {IERC1820Registry} and {ERC1820Implementer}. + */ +interface IERC777Recipient { + /** + * @dev Called by an {IERC777} token contract whenever tokens are being + * moved or created into a registered account (`to`). The type of operation + * is conveyed by `from` being the zero address or not. + * + * This call occurs _after_ the token contract's state is updated, so + * {IERC777-balanceOf}, etc., can be used to query the post-operation state. + * + * This function may revert to prevent the operation from being executed. + */ + function tokensReceived( + address operator, + address from, + address to, + uint256 amount, + bytes calldata userData, + bytes calldata operatorData + ) external; +} + + +// File @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) + +pragma solidity ^0.8.0; + +/** + * @title ERC721 token receiver interface + * @dev Interface for any contract that wants to support safeTransfers + * from ERC721 asset contracts. + */ +interface IERC721Receiver { + /** + * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} + * by `operator` from `from`, this function is called. + * + * It must return its Solidity selector to confirm the token transfer. + * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. + * + * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. + */ + function onERC721Received( + address operator, + address from, + uint256 tokenId, + bytes calldata data + ) external returns (bytes4); +} + + +// File contracts/samples/callback/TokenCallbackHandler.sol + + +pragma solidity ^0.8.12; + +/* solhint-disable no-empty-blocks */ + + + + +/** + * Token callback handler. + * Handles supported tokens' callbacks, allowing account receiving these tokens. + */ +contract TokenCallbackHandler is IERC777Recipient, IERC721Receiver, IERC1155Receiver { + function tokensReceived( + address, + address, + address, + uint256, + bytes calldata, + bytes calldata + ) external pure override { + } + + function onERC721Received( + address, + address, + uint256, + bytes calldata + ) external pure override returns (bytes4) { + return IERC721Receiver.onERC721Received.selector; + } + + function onERC1155Received( + address, + address, + uint256, + uint256, + bytes calldata + ) external pure override returns (bytes4) { + return IERC1155Receiver.onERC1155Received.selector; + } + + function onERC1155BatchReceived( + address, + address, + uint256[] calldata, + uint256[] calldata, + bytes calldata + ) external pure override returns (bytes4) { + return IERC1155Receiver.onERC1155BatchReceived.selector; + } + + function supportsInterface(bytes4 interfaceId) external view virtual override returns (bool) { + return + interfaceId == type(IERC721Receiver).interfaceId || + interfaceId == type(IERC1155Receiver).interfaceId || + interfaceId == type(IERC165).interfaceId; + } +} + + +// File @openzeppelin/contracts/utils/math/Math.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Standard math utilities missing in the Solidity language. + */ +library Math { + enum Rounding { + Down, // Toward negative infinity + Up, // Toward infinity + Zero // Toward zero + } + + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a > b ? a : b; + } + + /** + * @dev Returns the smallest of two numbers. + */ + function min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } + + /** + * @dev Returns the average of two numbers. The result is rounded towards + * zero. + */ + function average(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b) / 2 can overflow. + return (a & b) + (a ^ b) / 2; + } + + /** + * @dev Returns the ceiling of the division of two numbers. + * + * This differs from standard division with `/` in that it rounds up instead + * of rounding down. + */ + function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b - 1) / b can overflow on addition, so we distribute. + return a == 0 ? 0 : (a - 1) / b + 1; + } + + /** + * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) + * with further edits by Uniswap Labs also under MIT license. + */ + function mulDiv( + uint256 x, + uint256 y, + uint256 denominator + ) internal pure returns (uint256 result) { + unchecked { + // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use + // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 + // variables such that product = prod1 * 2^256 + prod0. + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly { + let mm := mulmod(x, y, not(0)) + prod0 := mul(x, y) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division. + if (prod1 == 0) { + return prod0 / denominator; + } + + // Make sure the result is less than 2^256. Also prevents denominator == 0. + require(denominator > prod1); + + /////////////////////////////////////////////// + // 512 by 256 division. + /////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0]. + uint256 remainder; + assembly { + // Compute remainder using mulmod. + remainder := mulmod(x, y, denominator) + + // Subtract 256 bit number from 512 bit number. + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. + // See https://cs.stackexchange.com/q/138556/92363. + + // Does not overflow because the denominator cannot be zero at this stage in the function. + uint256 twos = denominator & (~denominator + 1); + assembly { + // Divide denominator by twos. + denominator := div(denominator, twos) + + // Divide [prod1 prod0] by twos. + prod0 := div(prod0, twos) + + // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. + twos := add(div(sub(0, twos), twos), 1) + } + + // Shift in bits from prod1 into prod0. + prod0 |= prod1 * twos; + + // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such + // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for + // four bits. That is, denominator * inv = 1 mod 2^4. + uint256 inverse = (3 * denominator) ^ 2; + + // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works + // in modular arithmetic, doubling the correct bits in each step. + inverse *= 2 - denominator * inverse; // inverse mod 2^8 + inverse *= 2 - denominator * inverse; // inverse mod 2^16 + inverse *= 2 - denominator * inverse; // inverse mod 2^32 + inverse *= 2 - denominator * inverse; // inverse mod 2^64 + inverse *= 2 - denominator * inverse; // inverse mod 2^128 + inverse *= 2 - denominator * inverse; // inverse mod 2^256 + + // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. + // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is + // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inverse; + return result; + } + } + + /** + * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. + */ + function mulDiv( + uint256 x, + uint256 y, + uint256 denominator, + Rounding rounding + ) internal pure returns (uint256) { + uint256 result = mulDiv(x, y, denominator); + if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { + result += 1; + } + return result; + } + + /** + * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. + * + * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). + */ + function sqrt(uint256 a) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + + // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. + // + // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have + // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. + // + // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` + // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` + // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` + // + // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. + uint256 result = 1 << (log2(a) >> 1); + + // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, + // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at + // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision + // into the expected uint128 result. + unchecked { + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + return min(result, a / result); + } + } + + /** + * @notice Calculates sqrt(a), following the selected rounding direction. + */ + function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = sqrt(a); + return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); + } + } + + /** + * @dev Return the log in base 2, rounded down, of a positive value. + * Returns 0 if given 0. + */ + function log2(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >> 128 > 0) { + value >>= 128; + result += 128; + } + if (value >> 64 > 0) { + value >>= 64; + result += 64; + } + if (value >> 32 > 0) { + value >>= 32; + result += 32; + } + if (value >> 16 > 0) { + value >>= 16; + result += 16; + } + if (value >> 8 > 0) { + value >>= 8; + result += 8; + } + if (value >> 4 > 0) { + value >>= 4; + result += 4; + } + if (value >> 2 > 0) { + value >>= 2; + result += 2; + } + if (value >> 1 > 0) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 2, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log2(value); + return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); + } + } + + /** + * @dev Return the log in base 10, rounded down, of a positive value. + * Returns 0 if given 0. + */ + function log10(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >= 10**64) { + value /= 10**64; + result += 64; + } + if (value >= 10**32) { + value /= 10**32; + result += 32; + } + if (value >= 10**16) { + value /= 10**16; + result += 16; + } + if (value >= 10**8) { + value /= 10**8; + result += 8; + } + if (value >= 10**4) { + value /= 10**4; + result += 4; + } + if (value >= 10**2) { + value /= 10**2; + result += 2; + } + if (value >= 10**1) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 10, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log10(value); + return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0); + } + } + + /** + * @dev Return the log in base 256, rounded down, of a positive value. + * Returns 0 if given 0. + * + * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. + */ + function log256(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >> 128 > 0) { + value >>= 128; + result += 16; + } + if (value >> 64 > 0) { + value >>= 64; + result += 8; + } + if (value >> 32 > 0) { + value >>= 32; + result += 4; + } + if (value >> 16 > 0) { + value >>= 16; + result += 2; + } + if (value >> 8 > 0) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 10, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log256(value); + return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0); + } + } +} + + +// File @openzeppelin/contracts/utils/Strings.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol) + +pragma solidity ^0.8.0; + +/** + * @dev String operations. + */ +library Strings { + bytes16 private constant _SYMBOLS = "0123456789abcdef"; + uint8 private constant _ADDRESS_LENGTH = 20; + + /** + * @dev Converts a `uint256` to its ASCII `string` decimal representation. + */ + function toString(uint256 value) internal pure returns (string memory) { + unchecked { + uint256 length = Math.log10(value) + 1; + string memory buffer = new string(length); + uint256 ptr; + /// @solidity memory-safe-assembly + assembly { + ptr := add(buffer, add(32, length)) + } + while (true) { + ptr--; + /// @solidity memory-safe-assembly + assembly { + mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) + } + value /= 10; + if (value == 0) break; + } + return buffer; + } + } + + /** + * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. + */ + function toHexString(uint256 value) internal pure returns (string memory) { + unchecked { + return toHexString(value, Math.log256(value) + 1); + } + } + + /** + * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. + */ + function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { + bytes memory buffer = new bytes(2 * length + 2); + buffer[0] = "0"; + buffer[1] = "x"; + for (uint256 i = 2 * length + 1; i > 1; --i) { + buffer[i] = _SYMBOLS[value & 0xf]; + value >>= 4; + } + require(value == 0, "Strings: hex length insufficient"); + return string(buffer); + } + + /** + * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. + */ + function toHexString(address addr) internal pure returns (string memory) { + return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); + } +} + + +// File @openzeppelin/contracts/utils/cryptography/ECDSA.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. + * + * These functions can be used to verify that a message was signed by the holder + * of the private keys of a given address. + */ +library ECDSA { + enum RecoverError { + NoError, + InvalidSignature, + InvalidSignatureLength, + InvalidSignatureS, + InvalidSignatureV // Deprecated in v4.8 + } + + function _throwError(RecoverError error) private pure { + if (error == RecoverError.NoError) { + return; // no error: do nothing + } else if (error == RecoverError.InvalidSignature) { + revert("ECDSA: invalid signature"); + } else if (error == RecoverError.InvalidSignatureLength) { + revert("ECDSA: invalid signature length"); + } else if (error == RecoverError.InvalidSignatureS) { + revert("ECDSA: invalid signature 's' value"); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature` or error string. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + * + * Documentation for signature generation: + * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] + * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] + * + * _Available since v4.3._ + */ + function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { + if (signature.length == 65) { + bytes32 r; + bytes32 s; + uint8 v; + // ecrecover takes the signature parameters, and the only way to get them + // currently is to use assembly. + /// @solidity memory-safe-assembly + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + return tryRecover(hash, v, r, s); + } else { + return (address(0), RecoverError.InvalidSignatureLength); + } + } + + /** + * @dev Returns the address that signed a hashed message (`hash`) with + * `signature`. This address can then be used for verification purposes. + * + * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: + * this function rejects them by requiring the `s` value to be in the lower + * half order, and the `v` value to be either 27 or 28. + * + * IMPORTANT: `hash` _must_ be the result of a hash operation for the + * verification to be secure: it is possible to craft signatures that + * recover to arbitrary addresses for non-hashed data. A safe way to ensure + * this is by receiving a hash of the original message (which may otherwise + * be too long), and then calling {toEthSignedMessageHash} on it. + */ + function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, signature); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. + * + * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal pure returns (address, RecoverError) { + bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); + uint8 v = uint8((uint256(vs) >> 255) + 27); + return tryRecover(hash, v, r, s); + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. + * + * _Available since v4.2._ + */ + function recover( + bytes32 hash, + bytes32 r, + bytes32 vs + ) internal pure returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, r, vs); + _throwError(error); + return recovered; + } + + /** + * @dev Overload of {ECDSA-tryRecover} that receives the `v`, + * `r` and `s` signature fields separately. + * + * _Available since v4.3._ + */ + function tryRecover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal pure returns (address, RecoverError) { + // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature + // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines + // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most + // signatures from current libraries generate a unique signature with an s-value in the lower half order. + // + // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value + // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or + // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept + // these malleable signatures as well. + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + return (address(0), RecoverError.InvalidSignatureS); + } + + // If the signature is valid (and not malleable), return the signer address + address signer = ecrecover(hash, v, r, s); + if (signer == address(0)) { + return (address(0), RecoverError.InvalidSignature); + } + + return (signer, RecoverError.NoError); + } + + /** + * @dev Overload of {ECDSA-recover} that receives the `v`, + * `r` and `s` signature fields separately. + */ + function recover( + bytes32 hash, + uint8 v, + bytes32 r, + bytes32 s + ) internal pure returns (address) { + (address recovered, RecoverError error) = tryRecover(hash, v, r, s); + _throwError(error); + return recovered; + } + + /** + * @dev Returns an Ethereum Signed Message, created from a `hash`. This + * produces hash corresponding to the one signed with the + * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] + * JSON-RPC method as part of EIP-191. + * + * See {recover}. + */ + function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { + // 32 is the length in bytes of hash, + // enforced by the type signature above + return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); + } + + /** + * @dev Returns an Ethereum Signed Message, created from `s`. This + * produces hash corresponding to the one signed with the + * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] + * JSON-RPC method as part of EIP-191. + * + * See {recover}. + */ + function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); + } + + /** + * @dev Returns an Ethereum Signed Typed Data, created from a + * `domainSeparator` and a `structHash`. This produces hash corresponding + * to the one signed with the + * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] + * JSON-RPC method as part of EIP-712. + * + * See {recover}. + */ + function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { + return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); + } +} + + +// File @openzeppelin/contracts/utils/Address.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) + +pragma solidity ^0.8.1; + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * ==== + * + * [IMPORTANT] + * ==== + * You shouldn't rely on `isContract` to protect against flash loan attacks! + * + * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets + * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract + * constructor. + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize/address.code.length, which returns 0 + // for contracts in construction, since the code is only stored at the end + // of the constructor execution. + + return account.code.length > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + (bool success, ) = recipient.call{value: amount}(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value, + string memory errorMessage + ) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall( + address target, + bytes memory data, + string memory errorMessage + ) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + return functionDelegateCall(target, data, "Address: low-level delegate call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling + * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. + * + * _Available since v4.8._ + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata, + string memory errorMessage + ) internal view returns (bytes memory) { + if (success) { + if (returndata.length == 0) { + // only check isContract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + require(isContract(target), "Address: call to non-contract"); + } + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + /** + * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the + * revert reason or using the provided one. + * + * _Available since v4.3._ + */ + function verifyCallResult( + bool success, + bytes memory returndata, + string memory errorMessage + ) internal pure returns (bytes memory) { + if (success) { + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + function _revert(bytes memory returndata, string memory errorMessage) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } +} + + +// File @openzeppelin/contracts/proxy/utils/Initializable.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/Initializable.sol) + +pragma solidity ^0.8.2; + +/** + * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed + * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an + * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer + * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. + * + * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be + * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in + * case an upgrade adds a module that needs to be initialized. + * + * For example: + * + * [.hljs-theme-light.nopadding] + * ``` + * contract MyToken is ERC20Upgradeable { + * function initialize() initializer public { + * __ERC20_init("MyToken", "MTK"); + * } + * } + * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { + * function initializeV2() reinitializer(2) public { + * __ERC20Permit_init("MyToken"); + * } + * } + * ``` + * + * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as + * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. + * + * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure + * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. + * + * [CAUTION] + * ==== + * Avoid leaving a contract uninitialized. + * + * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation + * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke + * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: + * + * [.hljs-theme-light.nopadding] + * ``` + * /// @custom:oz-upgrades-unsafe-allow constructor + * constructor() { + * _disableInitializers(); + * } + * ``` + * ==== + */ +abstract contract Initializable { + /** + * @dev Indicates that the contract has been initialized. + * @custom:oz-retyped-from bool + */ + uint8 private _initialized; + + /** + * @dev Indicates that the contract is in the process of being initialized. + */ + bool private _initializing; + + /** + * @dev Triggered when the contract has been initialized or reinitialized. + */ + event Initialized(uint8 version); + + /** + * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, + * `onlyInitializing` functions can be used to initialize parent contracts. + * + * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a + * constructor. + * + * Emits an {Initialized} event. + */ + modifier initializer() { + bool isTopLevelCall = !_initializing; + require( + (isTopLevelCall && _initialized < 1) || (!Address.isContract(address(this)) && _initialized == 1), + "Initializable: contract is already initialized" + ); + _initialized = 1; + if (isTopLevelCall) { + _initializing = true; + } + _; + if (isTopLevelCall) { + _initializing = false; + emit Initialized(1); + } + } + + /** + * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the + * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be + * used to initialize parent contracts. + * + * A reinitializer may be used after the original initialization step. This is essential to configure modules that + * are added through upgrades and that require initialization. + * + * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` + * cannot be nested. If one is invoked in the context of another, execution will revert. + * + * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in + * a contract, executing them in the right order is up to the developer or operator. + * + * WARNING: setting the version to 255 will prevent any future reinitialization. + * + * Emits an {Initialized} event. + */ + modifier reinitializer(uint8 version) { + require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); + _initialized = version; + _initializing = true; + _; + _initializing = false; + emit Initialized(version); + } + + /** + * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the + * {initializer} and {reinitializer} modifiers, directly or indirectly. + */ + modifier onlyInitializing() { + require(_initializing, "Initializable: contract is not initializing"); + _; + } + + /** + * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. + * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized + * to any version. It is recommended to use this to lock implementation contracts that are designed to be called + * through proxies. + * + * Emits an {Initialized} event the first time it is successfully executed. + */ + function _disableInitializers() internal virtual { + require(!_initializing, "Initializable: contract is initializing"); + if (_initialized < type(uint8).max) { + _initialized = type(uint8).max; + emit Initialized(type(uint8).max); + } + } + + /** + * @dev Internal function that returns the initialized version. Returns `_initialized` + */ + function _getInitializedVersion() internal view returns (uint8) { + return _initialized; + } + + /** + * @dev Internal function that returns the initialized version. Returns `_initializing` + */ + function _isInitializing() internal view returns (bool) { + return _initializing; + } +} + + +// File @openzeppelin/contracts/interfaces/draft-IERC1822.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) + +pragma solidity ^0.8.0; + +/** + * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified + * proxy whose upgrades are fully controlled by the current implementation. + */ +interface IERC1822Proxiable { + /** + * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation + * address. + * + * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks + * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this + * function revert if invoked through a proxy. + */ + function proxiableUUID() external view returns (bytes32); +} + + +// File @openzeppelin/contracts/proxy/beacon/IBeacon.sol@v4.8.0 + + +// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) + +pragma solidity ^0.8.0; + +/** + * @dev This is the interface that {BeaconProxy} expects of its beacon. + */ +interface IBeacon { + /** + * @dev Must return an address that can be used as a delegate call target. + * + * {BeaconProxy} will check that this address is a contract. + */ + function implementation() external view returns (address); +} + + +// File @openzeppelin/contracts/utils/StorageSlot.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Library for reading and writing primitive types to specific storage slots. + * + * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. + * This library helps with reading and writing to such slots without the need for inline assembly. + * + * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. + * + * Example usage to set ERC1967 implementation slot: + * ``` + * contract ERC1967 { + * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + * + * function _getImplementation() internal view returns (address) { + * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; + * } + * + * function _setImplementation(address newImplementation) internal { + * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); + * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; + * } + * } + * ``` + * + * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ + */ +library StorageSlot { + struct AddressSlot { + address value; + } + + struct BooleanSlot { + bool value; + } + + struct Bytes32Slot { + bytes32 value; + } + + struct Uint256Slot { + uint256 value; + } + + /** + * @dev Returns an `AddressSlot` with member `value` located at `slot`. + */ + function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { + /// @solidity memory-safe-assembly + assembly { + r.slot := slot + } + } + + /** + * @dev Returns an `BooleanSlot` with member `value` located at `slot`. + */ + function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { + /// @solidity memory-safe-assembly + assembly { + r.slot := slot + } + } + + /** + * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. + */ + function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { + /// @solidity memory-safe-assembly + assembly { + r.slot := slot + } + } + + /** + * @dev Returns an `Uint256Slot` with member `value` located at `slot`. + */ + function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { + /// @solidity memory-safe-assembly + assembly { + r.slot := slot + } + } +} + + +// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol) + +pragma solidity ^0.8.2; + + + + +/** + * @dev This abstract contract provides getters and event emitting update functions for + * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. + * + * _Available since v4.1._ + * + * @custom:oz-upgrades-unsafe-allow delegatecall + */ +abstract contract ERC1967Upgrade { + // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 + bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; + + /** + * @dev Storage slot with the address of the current implementation. + * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is + * validated in the constructor. + */ + bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + + /** + * @dev Emitted when the implementation is upgraded. + */ + event Upgraded(address indexed implementation); + + /** + * @dev Returns the current implementation address. + */ + function _getImplementation() internal view returns (address) { + return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; + } + + /** + * @dev Stores a new address in the EIP1967 implementation slot. + */ + function _setImplementation(address newImplementation) private { + require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); + StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; + } + + /** + * @dev Perform implementation upgrade + * + * Emits an {Upgraded} event. + */ + function _upgradeTo(address newImplementation) internal { + _setImplementation(newImplementation); + emit Upgraded(newImplementation); + } + + /** + * @dev Perform implementation upgrade with additional setup call. + * + * Emits an {Upgraded} event. + */ + function _upgradeToAndCall( + address newImplementation, + bytes memory data, + bool forceCall + ) internal { + _upgradeTo(newImplementation); + if (data.length > 0 || forceCall) { + Address.functionDelegateCall(newImplementation, data); + } + } + + /** + * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. + * + * Emits an {Upgraded} event. + */ + function _upgradeToAndCallUUPS( + address newImplementation, + bytes memory data, + bool forceCall + ) internal { + // Upgrades from old implementations will perform a rollback test. This test requires the new + // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing + // this special case will break upgrade paths from old UUPS implementation to new ones. + if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) { + _setImplementation(newImplementation); + } else { + try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) { + require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); + } catch { + revert("ERC1967Upgrade: new implementation is not UUPS"); + } + _upgradeToAndCall(newImplementation, data, forceCall); + } + } + + /** + * @dev Storage slot with the admin of the contract. + * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is + * validated in the constructor. + */ + bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + + /** + * @dev Emitted when the admin account has changed. + */ + event AdminChanged(address previousAdmin, address newAdmin); + + /** + * @dev Returns the current admin. + */ + function _getAdmin() internal view returns (address) { + return StorageSlot.getAddressSlot(_ADMIN_SLOT).value; + } + + /** + * @dev Stores a new address in the EIP1967 admin slot. + */ + function _setAdmin(address newAdmin) private { + require(newAdmin != address(0), "ERC1967: new admin is the zero address"); + StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; + } + + /** + * @dev Changes the admin of the proxy. + * + * Emits an {AdminChanged} event. + */ + function _changeAdmin(address newAdmin) internal { + emit AdminChanged(_getAdmin(), newAdmin); + _setAdmin(newAdmin); + } + + /** + * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. + * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. + */ + bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; + + /** + * @dev Emitted when the beacon is upgraded. + */ + event BeaconUpgraded(address indexed beacon); + + /** + * @dev Returns the current beacon. + */ + function _getBeacon() internal view returns (address) { + return StorageSlot.getAddressSlot(_BEACON_SLOT).value; + } + + /** + * @dev Stores a new beacon in the EIP1967 beacon slot. + */ + function _setBeacon(address newBeacon) private { + require(Address.isContract(newBeacon), "ERC1967: new beacon is not a contract"); + require( + Address.isContract(IBeacon(newBeacon).implementation()), + "ERC1967: beacon implementation is not a contract" + ); + StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon; + } + + /** + * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does + * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). + * + * Emits a {BeaconUpgraded} event. + */ + function _upgradeBeaconToAndCall( + address newBeacon, + bytes memory data, + bool forceCall + ) internal { + _setBeacon(newBeacon); + emit BeaconUpgraded(newBeacon); + if (data.length > 0 || forceCall) { + Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data); + } + } +} + + +// File @openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/UUPSUpgradeable.sol) + +pragma solidity ^0.8.0; + + +/** + * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an + * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. + * + * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is + * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing + * `UUPSUpgradeable` with a custom implementation of upgrades. + * + * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. + * + * _Available since v4.1._ + */ +abstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade { + /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment + address private immutable __self = address(this); + + /** + * @dev Check that the execution is being performed through a delegatecall call and that the execution context is + * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case + * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a + * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to + * fail. + */ + modifier onlyProxy() { + require(address(this) != __self, "Function must be called through delegatecall"); + require(_getImplementation() == __self, "Function must be called through active proxy"); + _; + } + + /** + * @dev Check that the execution is not being performed through a delegate call. This allows a function to be + * callable on the implementing contract but not through proxies. + */ + modifier notDelegated() { + require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); + _; + } + + /** + * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the + * implementation. It is used to validate the implementation's compatibility when performing an upgrade. + * + * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks + * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this + * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. + */ + function proxiableUUID() external view virtual override notDelegated returns (bytes32) { + return _IMPLEMENTATION_SLOT; + } + + /** + * @dev Upgrade the implementation of the proxy to `newImplementation`. + * + * Calls {_authorizeUpgrade}. + * + * Emits an {Upgraded} event. + */ + function upgradeTo(address newImplementation) external virtual onlyProxy { + _authorizeUpgrade(newImplementation); + _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); + } + + /** + * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call + * encoded in `data`. + * + * Calls {_authorizeUpgrade}. + * + * Emits an {Upgraded} event. + */ + function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { + _authorizeUpgrade(newImplementation); + _upgradeToAndCallUUPS(newImplementation, data, true); + } + + /** + * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by + * {upgradeTo} and {upgradeToAndCall}. + * + * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. + * + * ```solidity + * function _authorizeUpgrade(address) internal override onlyOwner {} + * ``` + */ + function _authorizeUpgrade(address newImplementation) internal virtual; +} + + +// File contracts/samples/SimpleAccount.sol + + +pragma solidity ^0.8.12; + +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable no-inline-assembly */ +/* solhint-disable reason-string */ + + + + +/** + * minimal account. + * this is sample minimal account. + * has execute, eth handling methods + * has a single signer that can send requests through the entryPoint. + */ +contract SimpleAccount is BaseAccount, TokenCallbackHandler, UUPSUpgradeable, Initializable { + using ECDSA for bytes32; + + address public owner; + + IEntryPoint private immutable _entryPoint; + + event SimpleAccountInitialized(IEntryPoint indexed entryPoint, address indexed owner); + + modifier onlyOwner() { + _onlyOwner(); + _; + } + + /// @inheritdoc BaseAccount + function entryPoint() public view virtual override returns (IEntryPoint) { + return _entryPoint; + } + + + // solhint-disable-next-line no-empty-blocks + receive() external payable {} + + constructor(IEntryPoint anEntryPoint) { + _entryPoint = anEntryPoint; + _disableInitializers(); + } + + function _onlyOwner() internal view { + //directly from EOA owner, or through the account itself (which gets redirected through execute()) + require(msg.sender == owner || msg.sender == address(this), "only owner"); + } + + /** + * execute a transaction (called directly from owner, or by entryPoint) + */ + function execute(address dest, uint256 value, bytes calldata func) external { + _requireFromEntryPointOrOwner(); + _call(dest, value, func); + } + + /** + * execute a sequence of transactions + * @dev to reduce gas consumption for trivial case (no value), use a zero-length array to mean zero value + */ + function executeBatch(address[] calldata dest, uint256[] calldata value, bytes[] calldata func) external { + _requireFromEntryPointOrOwner(); + require(dest.length == func.length && (value.length == 0 || value.length == func.length), "wrong array lengths"); + if (value.length == 0) { + for (uint256 i = 0; i < dest.length; i++) { + _call(dest[i], 0, func[i]); + } + } else { + for (uint256 i = 0; i < dest.length; i++) { + _call(dest[i], value[i], func[i]); + } + } + } + + /** + * @dev The _entryPoint member is immutable, to reduce gas consumption. To upgrade EntryPoint, + * a new implementation of SimpleAccount must be deployed with the new EntryPoint address, then upgrading + * the implementation by calling `upgradeTo()` + */ + function initialize(address anOwner) public virtual initializer { + _initialize(anOwner); + } + + function _initialize(address anOwner) internal virtual { + owner = anOwner; + emit SimpleAccountInitialized(_entryPoint, owner); + } + + // Require the function call went through EntryPoint or owner + function _requireFromEntryPointOrOwner() internal view { + require(msg.sender == address(entryPoint()) || msg.sender == owner, "account: not Owner or EntryPoint"); + } + + /// implement template method of BaseAccount + function _validateSignature(UserOperation calldata userOp, bytes32 userOpHash) + internal override virtual returns (uint256 validationData) { + bytes32 hash = userOpHash.toEthSignedMessageHash(); + if (owner != hash.recover(userOp.signature)) + return SIG_VALIDATION_FAILED; + return 0; + } + + function _call(address target, uint256 value, bytes memory data) internal { + (bool success, bytes memory result) = target.call{value : value}(data); + if (!success) { + assembly { + revert(add(result, 32), mload(result)) + } + } + } + + /** + * check current account deposit in the entryPoint + */ + function getDeposit() public view returns (uint256) { + return entryPoint().balanceOf(address(this)); + } + + /** + * deposit more funds for this account in the entryPoint + */ + function addDeposit() public payable { + entryPoint().depositTo{value : msg.value}(address(this)); + } + + /** + * withdraw value from the account's deposit + * @param withdrawAddress target to send to + * @param amount to withdraw + */ + function withdrawDepositTo(address payable withdrawAddress, uint256 amount) public onlyOwner { + entryPoint().withdrawTo(withdrawAddress, amount); + } + + function _authorizeUpgrade(address newImplementation) internal view override { + (newImplementation); + _onlyOwner(); + } +} + + +// File contracts/samples/AspectEnabledSimpleAccount.sol + + +pragma solidity ^0.8.12; + +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable no-inline-assembly */ +/* solhint-disable reason-string */ + +/** + * minimal account. + * this is sample minimal account. + * has execute, eth handling methods + * has a single signer that can send requests through the entryPoint. + */ +contract AspectEnabledSimpleAccount is SimpleAccount { + /** + * Return value in case of signature failure, with no time-range. + * Equivalent to _packValidationData(true,0,0). + */ + uint256 internal constant ASPECT_VALIDATION_FAILED = 1; + + mapping(address => bool) private _aspectWhitelist; + + constructor(IEntryPoint anEntryPoint) SimpleAccount(anEntryPoint) {} + + /** + * Validate user's signature and nonce. + * Subclass doesn't need to override this method. Instead, + * it should override the specific internal validation methods. + * @param userOp - The user operation to validate. + * @param userOpHash - The hash of the user operation. + * @param missingAccountFunds - The amount of funds missing from the account + * to pay for the user operation. + */ + function validateUserOp( + UserOperation calldata userOp, + bytes32 userOpHash, + uint256 missingAccountFunds + ) external override returns (uint256 validationData) { + _requireFromEntryPoint(); + if (userOp.signature.length > 0) { + validationData = _validateSignature(userOp, userOpHash); + } else { + (bool success, bytes memory returnData) = address(0x65).call(bytes32ToBytes(userOpHash)); + validationData = success ? _validateAspectId(bytesToAddress(returnData)) : ASPECT_VALIDATION_FAILED; + } + _validateNonce(userOp.nonce); + _payPrefund(missingAccountFunds); + } + + /** + * @dev add a set of Aspect to whitelist + */ + function approveAspects(address[] calldata aspectIds) external { + _requireFromSelfOrOwner(); + for (uint256 i = 0; i < aspectIds.length; ++i) { + _aspectWhitelist[aspectIds[i]] = true; + } + } + + /** + * @dev remove a set of Aspect from the whitelist + */ + function disApproveAspects(address[] calldata aspectIds) external { + _requireFromSelfOrOwner(); + for (uint256 i = 0; i < aspectIds.length; ++i) { + delete _aspectWhitelist[aspectIds[i]]; + } + } + + /// implement template method of BaseAspectEnabledAccount + // solhint-disable-next-line no-unused-vars + function _validateAspectId(address aspectId) + internal virtual returns (uint256 validationData) { + if (_aspectWhitelist[aspectId]) { + return 0; + } + + return ASPECT_VALIDATION_FAILED; + } + + function bytesToAddress(bytes memory _data) private pure returns (address addr) { + assembly { + addr := mload(add(_data, 0x20)) + } + } + + function bytes32ToBytes(bytes32 _data) public pure returns (bytes memory) { + bytes memory result = new bytes(32); + assembly { + mstore(add(result, 0x20), _data) + } + return result; + } + + // Require the function call went through Self or owner + function _requireFromSelfOrOwner() internal view { + require(msg.sender == address(this) || msg.sender == owner, "account: not Owner or Self"); + } +} + + +// File @openzeppelin/contracts/utils/Create2.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.8.0) (utils/Create2.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer. + * `CREATE2` can be used to compute in advance the address where a smart + * contract will be deployed, which allows for interesting new mechanisms known + * as 'counterfactual interactions'. + * + * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more + * information. + */ +library Create2 { + /** + * @dev Deploys a contract using `CREATE2`. The address where the contract + * will be deployed can be known in advance via {computeAddress}. + * + * The bytecode for a contract can be obtained from Solidity with + * `type(contractName).creationCode`. + * + * Requirements: + * + * - `bytecode` must not be empty. + * - `salt` must have not been used for `bytecode` already. + * - the factory must have a balance of at least `amount`. + * - if `amount` is non-zero, `bytecode` must have a `payable` constructor. + */ + function deploy( + uint256 amount, + bytes32 salt, + bytes memory bytecode + ) internal returns (address addr) { + require(address(this).balance >= amount, "Create2: insufficient balance"); + require(bytecode.length != 0, "Create2: bytecode length is zero"); + /// @solidity memory-safe-assembly + assembly { + addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt) + } + require(addr != address(0), "Create2: Failed on deploy"); + } + + /** + * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the + * `bytecodeHash` or `salt` will result in a new destination address. + */ + function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) { + return computeAddress(salt, bytecodeHash, address(this)); + } + + /** + * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at + * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}. + */ + function computeAddress( + bytes32 salt, + bytes32 bytecodeHash, + address deployer + ) internal pure returns (address addr) { + /// @solidity memory-safe-assembly + assembly { + let ptr := mload(0x40) // Get free memory pointer + + // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... | + // |-------------------|---------------------------------------------------------------------------| + // | bytecodeHash | CCCCCCCCCCCCC...CC | + // | salt | BBBBBBBBBBBBB...BB | + // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA | + // | 0xFF | FF | + // |-------------------|---------------------------------------------------------------------------| + // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC | + // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ | + + mstore(add(ptr, 0x40), bytecodeHash) + mstore(add(ptr, 0x20), salt) + mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes + let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff + mstore8(start, 0xff) + addr := keccak256(start, 85) + } + } +} + + +// File @openzeppelin/contracts/proxy/Proxy.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol) + +pragma solidity ^0.8.0; + +/** + * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM + * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to + * be specified by overriding the virtual {_implementation} function. + * + * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a + * different contract through the {_delegate} function. + * + * The success and return data of the delegated call will be returned back to the caller of the proxy. + */ +abstract contract Proxy { + /** + * @dev Delegates the current call to `implementation`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + */ + function _delegate(address implementation) internal virtual { + assembly { + // Copy msg.data. We take full control of memory in this inline assembly + // block because it will not return to Solidity code. We overwrite the + // Solidity scratch pad at memory position 0. + calldatacopy(0, 0, calldatasize()) + + // Call the implementation. + // out and outsize are 0 because we don't know the size yet. + let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + + // Copy the returned data. + returndatacopy(0, 0, returndatasize()) + + switch result + // delegatecall returns 0 on error. + case 0 { + revert(0, returndatasize()) + } + default { + return(0, returndatasize()) + } + } + } + + /** + * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function + * and {_fallback} should delegate. + */ + function _implementation() internal view virtual returns (address); + + /** + * @dev Delegates the current call to the address returned by `_implementation()`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + */ + function _fallback() internal virtual { + _beforeFallback(); + _delegate(_implementation()); + } + + /** + * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other + * function in the contract matches the call data. + */ + fallback() external payable virtual { + _fallback(); + } + + /** + * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data + * is empty. + */ + receive() external payable virtual { + _fallback(); + } + + /** + * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback` + * call, or as part of the Solidity `fallback` or `receive` functions. + * + * If overridden should call `super._beforeFallback()`. + */ + function _beforeFallback() internal virtual {} +} + + +// File @openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol@v4.8.0 + + +// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol) + +pragma solidity ^0.8.0; + + +/** + * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an + * implementation address that can be changed. This address is stored in storage in the location specified by + * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the + * implementation behind the proxy. + */ +contract ERC1967Proxy is Proxy, ERC1967Upgrade { + /** + * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`. + * + * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded + * function call, and allows initializing the storage of the proxy like a Solidity constructor. + */ + constructor(address _logic, bytes memory _data) payable { + _upgradeToAndCall(_logic, _data, false); + } + + /** + * @dev Returns the current implementation address. + */ + function _implementation() internal view virtual override returns (address impl) { + return ERC1967Upgrade._getImplementation(); + } +} + + +// File contracts/samples/AspectEnabledSimpleAccountFactory.sol + + +pragma solidity ^0.8.12; + + + +/** + * A sample factory contract for SimpleAccount + * A UserOperations "initCode" holds the address of the factory, and a method call (to createAccount, in this sample factory). + * The factory's createAccount returns the target account address even if it is already installed. + * This way, the entryPoint.getSenderAddress() can be called either before or after the account is created. + */ +contract AspectEnabledSimpleAccountFactory { + AspectEnabledSimpleAccount public immutable accountImplementation; + + constructor(IEntryPoint _entryPoint) { + accountImplementation = new AspectEnabledSimpleAccount(_entryPoint); + } + + /** + * create an account, and return its address. + * returns the address even if the account is already deployed. + * Note that during UserOperation execution, this method is called only if the account is not deployed. + * This method returns an existing account address so that entryPoint.getSenderAddress() would work even after account creation + */ + function createAccount(address owner,uint256 salt) public returns (AspectEnabledSimpleAccount ret) { + address addr = getAddress(owner, salt); + uint codeSize = addr.code.length; + if (codeSize > 0) { + return AspectEnabledSimpleAccount(payable(addr)); + } + ret = AspectEnabledSimpleAccount(payable(new ERC1967Proxy{salt : bytes32(salt)}( + address(accountImplementation), + abi.encodeCall(SimpleAccount.initialize, (owner)) + ))); + } + + /** + * calculate the counterfactual address of this account as it would be returned by createAccount() + */ + function getAddress(address owner,uint256 salt) public view returns (address) { + return Create2.computeAddress(bytes32(salt), keccak256(abi.encodePacked( + type(ERC1967Proxy).creationCode, + abi.encode( + address(accountImplementation), + abi.encodeCall(SimpleAccount.initialize, (owner)) + ) + ))); + } +} diff --git a/packages/testcases/contracts/TransientStorage.sol b/packages/testcases/contracts/TransientStorage.sol new file mode 100644 index 0000000..4ee987c --- /dev/null +++ b/packages/testcases/contracts/TransientStorage.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-3.0 + +pragma solidity >=0.7.0 <0.9.0; + +contract TransientStorage { + address private deployer; + + constructor() { + deployer = msg.sender; + } + + function isOwner(address user) external view returns (bool result) { + return user == deployer; + } + + function call(address aspectId) public { + bytes memory contextKey = abi.encodePacked(aspectId, "context"); + (bool success, bytes memory returnData) = address(0x64).call(contextKey); + string memory preCallTransientStorage = success ? string(returnData) : ''; + + require(keccak256(abi.encodePacked(preCallTransientStorage)) == keccak256(abi.encodePacked("12")), "transient storage not as expected"); + + bytes memory inputData = abi.encode("context", "3"); + (success, ) = address(0x66).call(inputData); + require(success, "Failed to set transient storage"); + } +} \ No newline at end of file diff --git a/packages/testcases/contracts/event.sol b/packages/testcases/contracts/event.sol new file mode 100755 index 0000000..d40c3d0 --- /dev/null +++ b/packages/testcases/contracts/event.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.18; + +contract Event { + // Event declaration + // Up to 3 parameters can be indexed. + // Indexed parameters helps you filter the logs by the indexed parameter + event Log(address indexed sender, string message); + event AnotherLog(); + + function sendEvent() public { + emit Log(msg.sender, "Hello World!"); + emit Log(msg.sender, "Hello EVM!"); + emit AnotherLog(); + } +} diff --git a/packages/testcases/contracts/storage.sol b/packages/testcases/contracts/storage.sol index 9a15ace..32afef7 100644 --- a/packages/testcases/contracts/storage.sol +++ b/packages/testcases/contracts/storage.sol @@ -57,7 +57,7 @@ contract Storage { function setAspectContext(string calldata key, string calldata value) public returns (bool) { bytes memory contextKey = abi.encode(key, value); - (bool success, bytes memory returnData) = address(0x66).call(contextKey); + (bool success, ) = address(0x66).call(contextKey); return success; } } \ No newline at end of file diff --git a/packages/testcases/package-lock.json b/packages/testcases/package-lock.json index 1c8aa92..6afee61 100644 --- a/packages/testcases/package-lock.json +++ b/packages/testcases/package-lock.json @@ -9,19 +9,24 @@ "license": "ISC", "dependencies": { "@artela/aspect-libs": "file:../libs", - "@artela/web3": "1.9.22", - "@artela/web3-atl": "1.9.22", - "@artela/web3-eth": "1.9.22", - "@artela/web3-utils": "1.9.22", + "@artela/web3": "file:/Users/jack/Projects/js/web3.js/packages/web3/lib", + "@artela/web3-atl-aspect": "file:/Users/jack/Projects/js/web3.js/packages/web3-atl-aspect/lib", + "@artela/web3-core-method": "file:/Users/jack/Projects/js/web3.js/packages/web3-core-method/lib", + "@artela/web3-utils": "file:/Users/jack/Projects/js/web3.js/packages/web3-utils/lib", "@assemblyscript/loader": "^0.27.5", "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", - "bignumber.js": "^9.1.2" + "bignumber.js": "^9.1.2", + "node-fetch": "^3.3.2" }, "devDependencies": { "@artela/aspect-tool": "file:../toolkit", + "@ethersproject/keccak256": "^5.7.0", + "@types/mocha": "^10.0.7", "as-proto-gen": "^1.3.0", "assemblyscript": "^0.27.5", + "brotli": "^1.3.3", + "solc": "^0.8.26", "yargs": "^17.7.2" } }, @@ -34,15 +39,16 @@ "../../../artela-web3.js/packages/web3-utils/lib": { "extraneous": true }, + "../../../web3.js/packages/web3-atl-aspect/lib": {}, "../../../web3.js/packages/web3-atl/lib": { "extraneous": true }, + "../../../web3.js/packages/web3-core-method/lib": {}, "../../../web3.js/packages/web3-eth/lib": { "extraneous": true }, - "../../../web3.js/packages/web3-utils/lib": { - "extraneous": true - }, + "../../../web3.js/packages/web3-utils/lib": {}, + "../../../web3.js/packages/web3/lib": {}, "../../artela-web3.js/packages/web3-atl/lib": { "extraneous": true }, @@ -60,7 +66,7 @@ }, "../libs": { "name": "@artela/aspect-libs", - "version": "0.0.33", + "version": "0.0.36", "dependencies": { "as-proto": "^1.3.0", "assemblyscript": "^0.27.9" @@ -74,7 +80,7 @@ }, "../toolkit": { "name": "@artela/aspect-tool", - "version": "0.0.58", + "version": "0.0.60", "dev": true, "license": "ISC", "dependencies": { @@ -121,173 +127,26 @@ "link": true }, "node_modules/@artela/web3": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3/-/web3-1.9.22.tgz", - "integrity": "sha512-gyO0uiwEEEw+/IV1Lw14rUeOf9el54rpuK8gP44tnHXbK0D4EzwpO/944Pah+foJvsHu+AL3+b4sd8zN51e5KQ==", - "hasInstallScript": true, - "dependencies": { - "@artela/web3-atl": "1.9.22", - "@artela/web3-core": "1.9.22", - "@artela/web3-eth": "1.9.22", - "@artela/web3-utils": "1.9.22", - "web3-bzz": "1.9.0", - "web3-eth-personal": "1.9.0", - "web3-net": "1.9.0", - "web3-shh": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@artela/web3-atl": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-atl/-/web3-atl-1.9.22.tgz", - "integrity": "sha512-G35nCxa1hgQzPvMVMSxZFQqiV5CTEKg1+HQBW2L9M8UnplvG2Yot4MS3t3j0QHRiv+FFJA2ov7Ie9ioXvofFUQ==", - "dependencies": { - "@artela/web3-atl-aspect": "1.9.22", - "@artela/web3-core": "1.9.22", - "@artela/web3-core-method": "1.9.22", - "@artela/web3-eth-contract": "1.9.22", - "@artela/web3-utils": "1.9.22", - "web3-core-helpers": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-eth-abi": "1.9.0", - "web3-eth-accounts": "1.9.0", - "web3-eth-ens": "1.9.0", - "web3-eth-iban": "1.9.0", - "web3-eth-personal": "1.9.0", - "web3-net": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } + "resolved": "../../../web3.js/packages/web3/lib", + "link": true }, "node_modules/@artela/web3-atl-aspect": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-atl-aspect/-/web3-atl-aspect-1.9.22.tgz", - "integrity": "sha512-8zRRiI6qeDLXf1ayUNtb+E4xn4/RmoIb6gwO2bkUK1/FTdHIlelJb9YJ0N72g/aXmcYoOUYxfAFEBmfvTC+63g==", - "dependencies": { - "@artela/web3-core": "1.9.22", - "@artela/web3-core-method": "1.9.22", - "@artela/web3-eth-contract": "1.9.22", - "@artela/web3-utils": "1.9.22", - "@ethersproject/address": "^5.7.0", - "@types/bn.js": "^5.1.1", - "web3-core-helpers": "1.9.0", - "web3-core-promievent": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-eth-abi": "1.9.0", - "web3-eth-accounts": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@artela/web3-core": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-core/-/web3-core-1.9.22.tgz", - "integrity": "sha512-viXbTD9ZvXPV+xdNkfT5gQ7HJ38M1DBF/Lv1SoUysIP7CH99hra4G9ogi13B5i+jBKtjTLErD+uLMN7u4vqZqA==", - "dependencies": { - "@artela/web3-core-method": "1.9.22", - "@artela/web3-utils": "1.9.22", - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.9.0", - "web3-core-requestmanager": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } + "resolved": "../../../web3.js/packages/web3-atl-aspect/lib", + "link": true }, "node_modules/@artela/web3-core-method": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-core-method/-/web3-core-method-1.9.22.tgz", - "integrity": "sha512-e7iRkhVwV4uXzlLWXAy6vrzjiNHww2sSVLmI6lVfZVLu7HRi33ef5l0voddPrigXPnsBtFgOKIKJerAcc3e4eg==", - "dependencies": { - "@artela/web3-utils": "1.9.22", - "@ethersproject/address": "^5.7.0", - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.9.0", - "web3-core-promievent": "1.9.0", - "web3-core-subscriptions": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@artela/web3-eth": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-eth/-/web3-eth-1.9.22.tgz", - "integrity": "sha512-bem9MOtMDf7Zppy9j6Z28jUhjYY95UX+pQzeDPJDedodYMJVdoO7DHc7FEEZOMDlYgagK7vuIFq9GLEWAxBaLg==", - "dependencies": { - "@artela/web3-core": "1.9.22", - "@artela/web3-core-method": "1.9.22", - "@artela/web3-eth-contract": "1.9.22", - "@artela/web3-utils": "1.9.22", - "web3-core-helpers": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-eth-abi": "1.9.0", - "web3-eth-accounts": "1.9.0", - "web3-eth-ens": "1.9.0", - "web3-eth-iban": "1.9.0", - "web3-eth-personal": "1.9.0", - "web3-net": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@artela/web3-eth-contract": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-eth-contract/-/web3-eth-contract-1.9.22.tgz", - "integrity": "sha512-dk+NC/AlZtL+iBqMPzQhPTnUE094GDmbU/Q8nEhUaXC6xfC/QEpsEJSUeZeqw26EG8VRl6ve2Nbu080WoOgS/Q==", - "dependencies": { - "@artela/web3-core": "1.9.22", - "@artela/web3-core-method": "1.9.22", - "@artela/web3-utils": "1.9.22", - "@types/bn.js": "^5.1.1", - "web3-core-helpers": "1.9.0", - "web3-core-promievent": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-eth-abi": "1.9.0", - "web3-eth-accounts": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } + "resolved": "../../../web3.js/packages/web3-core-method/lib", + "link": true }, "node_modules/@artela/web3-utils": { - "version": "1.9.22", - "resolved": "https://registry.npmjs.org/@artela/web3-utils/-/web3-utils-1.9.22.tgz", - "integrity": "sha512-aE2WtpvmEAPxO7JrJ1lf7nhN2SLm09geIThYrSTYxITB/4GONcOD+0aY8y0G5WzFQAz9jF4wfhSAdj4+uIMDKQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } + "resolved": "../../../web3.js/packages/web3-utils/lib", + "link": true }, "node_modules/@assemblyscript/loader": { "version": "0.27.25", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.27.25.tgz", "integrity": "sha512-o5D5trJEmUS6ghwLLol8PgFeA2z0A/5pgSqahQQiiG/nf4MuFlw6V7ftD9ucaiuy7cc/Bi/zLPjjCdG4/SeyIw==" }, - "node_modules/@ethereumjs/common": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", - "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.1" - } - }, "node_modules/@ethereumjs/tx": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-5.1.0.tgz", @@ -402,142 +261,11 @@ "@scure/bip39": "1.2.1" } }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, "node_modules/@ethersproject/bytes": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "dev": true, "funding": [ { "type": "individual", @@ -552,54 +280,11 @@ "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "dev": true, "funding": [ { "type": "individual", @@ -619,6 +304,7 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true, "funding": [ { "type": "individual", @@ -630,193 +316,47 @@ } ] }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", "dependencies": { - "@ethersproject/logger": "^5.7.0" + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", "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" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", - "dependencies": { - "@noble/hashes": "1.3.1" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", - "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", - "dependencies": { - "@noble/curves": "~1.1.0", - "@noble/hashes": "~1.3.1", - "@scure/base": "~1.1.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip39": { @@ -831,126 +371,18 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" - }, "node_modules/@types/humps": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/humps/-/humps-2.0.6.tgz", "integrity": "sha512-Fagm1/a/1J9gDKzGdtlPmmTN5eSw/aaTzHtj740oSfo+MODsSY2WglxMmhTdOglC8nxqUhGGQ+5HfVtBvxo3Kg==", "dev": true }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/responselike": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", - "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abortcontroller-polyfill": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", - "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } + "node_modules/@types/mocha": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "dev": true, + "license": "MIT" }, "node_modules/ansi-regex": { "version": "5.0.1", @@ -976,11 +408,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, "node_modules/as-proto": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/as-proto/-/as-proto-1.3.0.tgz", @@ -1016,14 +443,6 @@ "node": ">=12" } }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, "node_modules/assemblyscript": { "version": "0.27.25", "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.25.tgz", @@ -1046,60 +465,11 @@ "url": "https://opencollective.com/assemblyscript" } }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "devOptional": true, "funding": [ { "type": "github", @@ -1115,14 +485,6 @@ } ] }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", @@ -1141,3160 +503,393 @@ "wasm2js": "bin/wasm2js" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=7.0.0" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "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" + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" } }, - "node_modules/bs58": { + "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "url": "https://github.com/sponsors/jimmywarting" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "paypal", + "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" + "node": "^12.20 || >= 14.13" } }, - "node_modules/cacheable-lookup": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", - "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "node": ">=4.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "fetch-blob": "^3.1.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.20.0" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "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" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "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" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "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" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", - "hasInstallScript": true, - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "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" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ext": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", - "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", - "dependencies": { - "type": "^2.7.2" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", - "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/fs-extra/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/google-protobuf": { - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", - "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==", - "dev": true - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", - "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "@szmarczak/http-timer": "^5.0.1", - "@types/cacheable-request": "^6.0.2", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^6.0.4", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "form-data-encoder": "1.7.1", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/humps": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", - "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==", - "dev": true - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", - "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "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" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "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" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/responselike/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/swarm-js": { - "version": "0.1.42", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", - "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^11.8.5", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/swarm-js/node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/swarm-js/node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/swarm-js/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "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" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } + "node_modules/google-protobuf": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", + "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==", + "dev": true }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } + "node_modules/humps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", + "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==", + "dev": true }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.9.0.tgz", - "integrity": "sha512-9Zli9dikX8GdHwBb5/WPzpSVuy3EWMKY3P4EokCQra31fD7DLizqAAaTUsFwnK7xYkw5ogpHgelw9uKHHzNajg==", - "hasInstallScript": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "12.1.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.9.0.tgz", - "integrity": "sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.9.0", - "web3-core-method": "1.9.0", - "web3-core-requestmanager": "1.9.0", - "web3-utils": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.9.0.tgz", - "integrity": "sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg==", - "dependencies": { - "web3-eth-iban": "1.9.0", - "web3-utils": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.9.0.tgz", - "integrity": "sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w==", - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.9.0", - "web3-core-promievent": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-utils": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.9.0.tgz", - "integrity": "sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ==", - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.9.0.tgz", - "integrity": "sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q==", - "dependencies": { - "util": "^0.12.5", - "web3-core-helpers": "1.9.0", - "web3-providers-http": "1.9.0", - "web3-providers-ipc": "1.9.0", - "web3-providers-ws": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } + "optional": true, + "peer": true }, - "node_modules/web3-core-subscriptions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.9.0.tgz", - "integrity": "sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA==", - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.9.0" - }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-core/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true }, - "node_modules/web3-eth-abi": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.9.0.tgz", - "integrity": "sha512-0BLQ3FKMrzJkA930jOX3fMaybAyubk06HChclLpiR0NWmgWXm1tmBrJdkyRy2ZTZpmfuZc9xTFRfl0yZID1voA==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.9.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/web3-eth-abi/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true }, - "node_modules/web3-eth-accounts": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.9.0.tgz", - "integrity": "sha512-VeIZVevmnSll0AC1k5F/y398ZE89d1SRuYk8IewLUhL/tVAsFEsjl2SGgm0+aDcHmgPrkW+qsCJ+C7rWg/N4ZA==", - "dependencies": { - "@ethereumjs/common": "2.5.0", - "@ethereumjs/tx": "3.3.2", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.1.5", - "scrypt-js": "^3.0.1", - "uuid": "^9.0.0", - "web3-core": "1.9.0", - "web3-core-helpers": "1.9.0", - "web3-core-method": "1.9.0", - "web3-utils": "1.9.0" - }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", - "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "ethereumjs-util": "^7.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" + "node": ">= 0.10.0" } }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/web3-eth-accounts/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/web3-utils/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/web3-eth-contract": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.9.0.tgz", - "integrity": "sha512-+j26hpSaEtAdUed0TN5rnc+YZOcjPxMjFX4ZBKatvFkImdbVv/tzTvcHlltubSpgb2ZLyZ89lSL6phKYwd2zNQ==", - "dependencies": { - "@types/bn.js": "^5.1.1", - "web3-core": "1.9.0", - "web3-core-helpers": "1.9.0", - "web3-core-method": "1.9.0", - "web3-core-promievent": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-eth-abi": "1.9.0", - "web3-utils": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=10.5.0" } }, - "node_modules/web3-eth-ens": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.9.0.tgz", - "integrity": "sha512-LOJZeN+AGe9arhuExnrPPFYQr4WSxXEkpvYIlst/joOEUNLDwfndHnJIK6PI5mXaYSROBtTx6erv+HupzGo7vA==", + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.9.0", - "web3-core-helpers": "1.9.0", - "web3-core-promievent": "1.9.0", - "web3-eth-abi": "1.9.0", - "web3-eth-contract": "1.9.0", - "web3-utils": "1.9.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/web3-eth-iban": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.9.0.tgz", - "integrity": "sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog==", - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.9.0" - }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-eth-iban/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.9.0.tgz", - "integrity": "sha512-r9Ldo/luBqJlv1vCUEQnUS+C3a3ZdbYxVHyfDkj6RWMyCqqo8JE41HWE+pfa0RmB1xnGL2g8TbYcHcqItck/qg==", - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.9.0", - "web3-core-helpers": "1.9.0", - "web3-core-method": "1.9.0", - "web3-net": "1.9.0", - "web3-utils": "1.9.0" + "node": ">=10.13.0" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/web3-eth-personal/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/web3-net": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.9.0.tgz", - "integrity": "sha512-L+fDZFgrLM5Y15aonl2q6L+RvfaImAngmC0Jv45hV2FJ5IfRT0/2ob9etxZmvEBWvOpbqSvghfOhJIT3XZ37Pg==", - "dependencies": { - "web3-core": "1.9.0", - "web3-core-method": "1.9.0", - "web3-utils": "1.9.0" - }, - "engines": { - "node": ">=8.0.0" + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/web3-net/node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.9.0.tgz", - "integrity": "sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ==", - "dependencies": { - "abortcontroller-polyfill": "^1.7.3", - "cross-fetch": "^3.1.4", - "es6-promise": "^4.2.8", - "web3-core-helpers": "1.9.0" + "bin": { + "solcjs": "solc.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, - "node_modules/web3-providers-ipc": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.9.0.tgz", - "integrity": "sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA==", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.9.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-providers-ws": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.9.0.tgz", - "integrity": "sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w==", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.9.0", - "websocket": "^1.0.32" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/web3-shh": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.9.0.tgz", - "integrity": "sha512-bIBZlralgz4ICCrwkefB2nPPJWfx28NuHIpjB7d9ADKynElubQuqudYhKtSEkKXACuME/BJm0pIFJcJs/gDnMg==", - "hasInstallScript": true, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", "dependencies": { - "web3-core": "1.9.0", - "web3-core-method": "1.9.0", - "web3-core-subscriptions": "1.9.0", - "web3-net": "1.9.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.6.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "node": ">= 10.0.0" } }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 8" } }, "node_modules/wrap-ansi": { @@ -4314,67 +909,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -4384,19 +918,6 @@ "node": ">=10" } }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/packages/testcases/package.json b/packages/testcases/package.json index ebd1e18..975987e 100644 --- a/packages/testcases/package.json +++ b/packages/testcases/package.json @@ -12,18 +12,19 @@ "asbuild:release": "asc aspect/index.ts --target release", "contract:bind": "node scripts/bind.cjs", "contract:deploy": "node scripts/contract-deploy.cjs", - "contract:build": "asolc -o ./build/contract/ --via-ir --abi --storage-layout --bin ./contracts/*.sol --overwrite", - "build": "npm run contract:build && npm run aspect:gen && npm run aspect:build" + "contract:build": "solc -o ./build/contract/ --via-ir --abi --storage-layout --bin ./contracts/*.sol --overwrite", + "build": "npm run contract:build && npm run aspect:gen && npm run aspect:build", + "test": "mocha tests/Test.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@artela/aspect-libs": "file:../libs", - "@artela/web3": "1.9.22", - "@artela/web3-atl": "1.9.22", - "@artela/web3-eth": "1.9.22", - "@artela/web3-utils": "1.9.22", + "@artela/web3": "file:/Users/jack/Projects/js/web3.js/packages/web3/lib", + "@artela/web3-atl-aspect": "file:/Users/jack/Projects/js/web3.js/packages/web3-atl-aspect/lib", + "@artela/web3-utils":"file:/Users/jack/Projects/js/web3.js/packages/web3-utils/lib", + "@artela/web3-core-method":"file:/Users/jack/Projects/js/web3.js/packages/web3-core-method/lib", "@assemblyscript/loader": "^0.27.5", "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", @@ -32,9 +33,13 @@ }, "devDependencies": { "@artela/aspect-tool": "file:../toolkit", + "@types/mocha": "^10.0.7", "as-proto-gen": "^1.3.0", "assemblyscript": "^0.27.5", - "yargs": "^17.7.2" + "brotli": "^1.3.3", + "solc": "^0.8.26", + "yargs": "^17.7.2", + "@ethersproject/keccak256": "^5.7.0" }, "type": "module", "exports": { diff --git a/packages/testcases/project.config.json b/packages/testcases/project.config.json index a6d4187..880c5d0 100644 --- a/packages/testcases/project.config.json +++ b/packages/testcases/project.config.json @@ -1,3 +1,4 @@ { - "node": "http://127.0.0.1:8545" -} \ No newline at end of file + "node": "http://127.0.0.1:8545", + "nodeWS": "ws://127.0.0.1:8546" +} diff --git a/packages/testcases/tests/Test.js b/packages/testcases/tests/Test.js new file mode 100644 index 0000000..2b5eaa3 --- /dev/null +++ b/packages/testcases/tests/Test.js @@ -0,0 +1,17 @@ +import { TestManager } from './utils/TestManager.js' + +// Init TestManager +const testManager = new TestManager(); + +let name; +const args = process.argv.slice(2); +console.log("args: ", args) +if (args.length > 1) { + const [key, value] = args[1].split('='); + if (key == "case") { + name = value; + } +} + +// Run Tests +testManager.runTestCases(name); diff --git a/packages/testcases/tests/actions/Action.js b/packages/testcases/tests/actions/Action.js new file mode 100644 index 0000000..1a079e7 --- /dev/null +++ b/packages/testcases/tests/actions/Action.js @@ -0,0 +1,316 @@ +import { expect } from 'chai'; +import { Transaction as EthereumTx } from 'ethereumjs-tx'; + + +export class Action { + constructor(action) { + this.action = action; + } + + getAccount(testManager, context) { + const from = testManager.replaceVariables( + this.action.account || testManager.account.address, + context, + ); + console.log(` ⤷ 👛 Executing action with account ${from}`); + return from; + } + + async execute(testManager, context) { + throw new Error('Execute method must be implemented'); + } + + validate(result, receipt, tx, error, context, testManager) { + const validateField = (field, sources, context) => { + Object.keys(field).forEach(key => { + const condition = field[key]; + const parts = key.split('.'); + const sourceType = parts.shift(); + const sourcePath = parts.join('.'); + let actualValue; + + if (sourceType === 'result') { + actualValue = sourcePath + .split('.') + .reduce((obj, part) => obj && obj[part], sources.result); + } else if (sourceType === 'receipt') { + actualValue = sourcePath + .split('.') + .reduce((obj, part) => obj && obj[part], sources.receipt); + } else if (sourceType === 'tx') { + actualValue = sourcePath.split('.').reduce((obj, part) => obj && obj[part], sources.tx); + } else if (sourceType === 'error') { + actualValue = error ? error.message : ''; + } else { + throw new Error(`Unknown source type: ${sourceType}`); + } + + const expectedValue = testManager.replaceVariables(condition, context); + + let validated = false; + if (expectedValue.eq !== undefined) { + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log( + `🔍 Validating data: ${key}, condition: eq, expected: ${JSON.stringify(expectedValue.eq)}, actual: ${JSON.stringify(actualValue)}`, + ); + } + if (typeof expectedValue.eq === 'object') { + expect(actualValue).to.deep.equal(expectedValue.eq); + } else { + expect(actualValue).to.eq(expectedValue.eq); + } + validated = true; + } + if (expectedValue.gt !== undefined) { + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log( + `🔍 Validating data: ${key}, condition: gt, expected: ${JSON.stringify(expectedValue.gt)}, actual: ${JSON.stringify(actualValue)}`, + ); + } + if (typeof expectedValue.gt === 'object') { + expect(actualValue).to.be.above(expectedValue.gt); + } else { + expect(actualValue).to.be.gt(expectedValue.gt); + } + validated = true; + } + if (expectedValue.lt !== undefined) { + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log( + `🔍 Validating data: ${key}, condition: lt, expected: ${JSON.stringify(expectedValue.lt)}, actual: ${JSON.stringify(actualValue)}`, + ); + } + if (typeof expectedValue.lt === 'object') { + expect(actualValue).to.be.below(expectedValue.lt); + } else { + expect(actualValue).to.be.lt(expectedValue.lt); + } + validated = true; + } + if (expectedValue.notEq !== undefined) { + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log( + `🔍 Validating data: ${key}, condition: notEq, expected: ${JSON.stringify(expectedValue.notEq)}, actual: ${JSON.stringify(actualValue)}`, + ); + } + if (typeof expectedValue.notEq === 'object') { + expect(actualValue).to.not.deep.eq(expectedValue.notEq); + } else { + expect(actualValue).to.not.eq(expectedValue.notEq); + } + validated = true; + } + if (expectedValue.include !== undefined) { + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log( + `🔍 Validating data: ${key}, condition: include, expected: ${JSON.stringify(expectedValue.include)}, actual: ${JSON.stringify(actualValue)}`, + ); + } + if (typeof expectedValue.include === 'string') { + expect(actualValue).to.include(expectedValue.include); + } else if (Array.isArray(expectedValue.include)) { + expectedValue.include.forEach(item => { + expect(actualValue).to.deep.include(item); + }); + } + validated = true; + } + if (expectedValue.notInclude !== undefined) { + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log( + `🔍 Validating data: ${key}, condition: notInclude, expected: ${JSON.stringify(expectedValue.notInclude)}, actual: ${JSON.stringify(actualValue)}`, + ); + } + if (typeof expectedValue.notInclude === 'string') { + expect(actualValue).to.not.include(expectedValue.notInclude); + } else if (Array.isArray(expectedValue.notInclude)) { + expectedValue.notInclude.forEach(item => { + expect(actualValue).to.not.deep.include(item); + }); + } + validated = true; + } + + if (!validated) { + console.log('🔔 No validation rule recognized'); + } + }); + }; + + if (!this.action.expect) { + this.action.expect = {}; + } + if (!this.action.expect.error) { + this.action.expect.error = { eq: '' }; + } + + if (this.action.expect) { + validateField(this.action.expect, { result, receipt, tx, error }, context); + } + } + + async estimateGas(tx, testManager, context) { + if (!tx.gas || tx.gas === 'auto') { + tx.gas = undefined; + tx.gas = await testManager.web3.eth.estimateGas(tx); + } + + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log('⛽️ Transaction Gas:', tx.gas); + } + + return tx; + } + + async sendTransaction(tx, testManager, context, notSign, notSend) { + const account = testManager.web3.eth.accounts.wallet[tx.from]; + if (!account) { + throw new Error(`Account ${tx.from} not found in web3 wallet`); + } + + let rawTx, signedTx; + if (!notSign) { + signedTx = await account.signTransaction(tx); + rawTx = signedTx.rawTransaction; + } else { + rawTx = '0x' + new EthereumTx(tx).serialize().toString('hex'); + } + + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log('📒 Transaction Details:', signedTx); + } + + if (notSend) { + return { signedTx } + } + + const receipt = await testManager.web3.eth.sendSignedTransaction(rawTx); + + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log('🧾 Transaction Receipt:', receipt); + } + + return { receipt }; + } + + async sendTransactions(from, txs, testManager, context, tps) { + const account = testManager.web3.eth.accounts.wallet[from]; + if (!account) { + throw new Error(`Account ${from} not found in web3 wallet`); + } + + let nonce = await testManager.web3.atl.getTransactionCount(from); + let fetch = new fetchBlock(testManager); + + let i = 0; + for (let tx of txs) { + const startTime = Date.now(); + tx.nonce = nonce++; + const signedTx = await account.signTransaction(tx); + + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log('📒 Transaction Details:', signedTx); + } + + fetch.fetchAdd(signedTx.transactionHash); + if (process.env.SHOW_TX_DETAILS === 'true') { + console.log("sending tx, index", i++, "total", txs.length, "hash", signedTx.transactionHash); + } + testManager.web3.eth.sendSignedTransaction(signedTx.rawTransaction); + + const elapsedTime = Date.now() - startTime; + const remainingTime = Math.max(0, (1000 / tps) - elapsedTime); + await new Promise(r => setTimeout(r, remainingTime)); + } + const [receipts, failures] = await fetch.fetchCheck(); + return [receipts, [...failures]]; + } +} + + +class fetchBlock { + constructor(testManager) { + this.sentTransactionHashes = new Set(); + this.failureTransactionHashes = new Set(); + this.receipts = []; + this.fetching = false; + this.duration = 500; + this.testManager = testManager; + } + + fetchAdd(hash) { + if (!this.fetching) { + this.fetching = true; + this.start(); + } + this.sentTransactionHashes.add(hash); + } + + fetchRemove(hash) { + if (this.sentTransactionHashes.has(hash)) { + this.sentTransactionHashes.delete(hash); + } + } + + async start() { + try { + let current = await this.testManager.web3.eth.getBlockNumber(); + + while (this.fetching) { + const latest = await this.testManager.web3.eth.getBlockNumber(); + if (latest == current) { + await new Promise(r => setTimeout(r, this.duration)); + continue; + } + + const block = await this.testManager.web3.eth.getBlock(current); + console.log(`Block Number: ${block.number}, txs: ${block.transactions.length}`); + for (const tx of block.transactions) { + const receipt = await this.testManager.web3.eth.getTransactionReceipt(tx); + if (receipt && receipt.status) { + this.receipts.push(receipt); + this.fetchRemove(tx); + } else { + this.failureTransactionHashes.add(tx); + } + } + + current++; + } + } catch (error) { + console.error('Error fetching blocks:', error); + } + } + + async fetchCheck() { + let i = 0; + while (true) { + const sendlen = this.sentTransactionHashes.size; + const faillen = this.failureTransactionHashes.size; + if (sendlen > faillen) { + // if (i % 10 == 0) { + // console.log(`waitting tx to finish: ${sendlen - faillen}`); + // } + i++; + await new Promise(r => setTimeout(r, 100)); + } else { + this.stop(); + if (faillen == 0) { + this.sentTransactionHashes.clear(); + this.failureTransactionHashes.clear(); + // console.log(`all transaction success`); + return [this.receipts, new Set()]; + } else { + // console.log("some transaction failed", failureTransactionHashes); + return [this.receipts, this.failureTransactionHashes]; + } + } + } + } + + stop() { + if (this.fetching) { + this.fetching = false; + } + } +} diff --git a/packages/testcases/tests/actions/AspectVersionAction.js b/packages/testcases/tests/actions/AspectVersionAction.js new file mode 100644 index 0000000..4d6773d --- /dev/null +++ b/packages/testcases/tests/actions/AspectVersionAction.js @@ -0,0 +1,14 @@ +import { Action } from './Action.js'; + +export class AspectVersionAction extends Action { + async execute(testManager, context) { + const { aspect } = testManager.replaceVariables(this.action.options, context); + const aspectCore = testManager.web3.atl.aspectCore(); + + const from = this.getAccount(testManager, context); + + const versionResult = await aspectCore.methods.versionOf(aspect).call({ from }); + + return { result: { version: versionResult } }; + } +} diff --git a/packages/testcases/tests/actions/BindAspectAction.js b/packages/testcases/tests/actions/BindAspectAction.js new file mode 100644 index 0000000..487b2b5 --- /dev/null +++ b/packages/testcases/tests/actions/BindAspectAction.js @@ -0,0 +1,31 @@ +import { Action } from './Action.js'; + +export class BindAspectAction extends Action { + async execute(testManager, context) { + const { account, aspect, priority, version, gas, isEOA } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + let encodedABI; + if (isEOA) { + const aspectCore = testManager.web3.atl.aspectCore(); + const eoaBinding = await aspectCore.methods.bind(aspect, priority, account, version); + encodedABI = eoaBinding.encodeABI(); + } else { + const instance = new testManager.web3.eth.Contract([], account); + const bind = instance.bind({ aspectId: aspect, priority, aspectVersion: version }); + encodedABI = bind.encodeABI(); + } + + const tx = { + gas, + from, + to: testManager.ARTELA_ADDRESS, + data: encodedABI, + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + + return { result: null, receipt, tx }; + } +} diff --git a/packages/testcases/tests/actions/BindMultiAspectsAction.js b/packages/testcases/tests/actions/BindMultiAspectsAction.js new file mode 100644 index 0000000..7e59301 --- /dev/null +++ b/packages/testcases/tests/actions/BindMultiAspectsAction.js @@ -0,0 +1,31 @@ +import { Action } from './Action.js'; + +export class BindMultiAspectsAction extends Action { + async execute(testManager, context) { + const { account, aspects, priority, version, gas, count } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const instance = new testManager.web3.eth.Contract([], account); + + if (aspects.length < count) { + throw new Error("deployed aspects are not enough for binding, expect " + count.toString() + ", got " + accounts.length.toString()); + } + + let txs = []; + for (let i = 0; i < count; i++) { + const bind = instance.bind({ aspectId: aspects[i], priority, aspectVersion: version }); + + const tx = { + gas, + from, + to: testManager.ARTELA_ADDRESS, + data: bind.encodeABI() + }; + + await this.estimateGas(tx, testManager, context); + txs.push(tx); + } + const [receipts, failures] = await this.sendTransactions(from, txs, testManager, context, 15); + return { result: { receipts, failures }, receipt: null, tx: null }; + } +} diff --git a/packages/testcases/tests/actions/BindMultiContractsAction.js b/packages/testcases/tests/actions/BindMultiContractsAction.js new file mode 100644 index 0000000..278cf58 --- /dev/null +++ b/packages/testcases/tests/actions/BindMultiContractsAction.js @@ -0,0 +1,31 @@ +import { Action } from './Action.js'; + +export class BindMultiContractsAction extends Action { + async execute(testManager, context) { + const { accounts, aspect, priority, version, gas, count } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + if (accounts.length < count) { + throw new Error("deployed contracts are not enough for binding, expect " + count.toString() + ", got " + accounts.length.toString()); + } + + let txs = []; + for (let i = 0; i < count; i++) { + const instance = new testManager.web3.eth.Contract([], accounts[i]); + + const bind = instance.bind({ aspectId: aspect, priority, aspectVersion: version }); + + const tx = { + gas, + from, + to: testManager.ARTELA_ADDRESS, + data: bind.encodeABI() + }; + + await this.estimateGas(tx, testManager, context); + txs.push(tx); + } + const [receipts, failures] = await this.sendTransactions(from, txs, testManager, context, 10); + return { result: { receipts, failures }, receipt: null, tx: null }; + } +} diff --git a/packages/testcases/tests/actions/CallContractAction.js b/packages/testcases/tests/actions/CallContractAction.js new file mode 100644 index 0000000..c4e8373 --- /dev/null +++ b/packages/testcases/tests/actions/CallContractAction.js @@ -0,0 +1,90 @@ +import { Action } from './Action.js'; +import Web3Utils from '@artela/web3-utils'; +const numberToHex = Web3Utils.numberToHex; + +export class CallContractAction extends Action { + async execute(testManager, context) { + const { + contract, method, args, abi, isCall, gas, value, + data, maxFeePerGasGwei, maxPriorityFeePerGasGwei, accessList, + notSign, nonce, notSend + } = testManager.replaceVariables( + this.action.options, + context, + ); + + // accessList is a formatted json string, replace the variable inline + const access = testManager.replaceNestedVariables(accessList, context); + + // Get contract ABI + const instance = new testManager.web3.eth.Contract(abi, contract); + + const from = this.getAccount(testManager, context); + + if (isCall) { + // Call contract method + const result = await instance.methods[method](...args).call({ from }); + return { result: { ret: result } }; + } else { + let callData = data; + if (!data || data.length == 0) { + callData = instance.methods[method](...args).encodeABI() + } + // Send transaction + + let tx; + if (!notSign) { + tx = { + from, + gas, + to: contract, + data: callData, + } + + if (nonce) { + tx.nonce = parseFloat(nonce); + } + } else { + const gasPrice = await testManager.web3.eth.getGasPrice(); + const chainId = await testManager.web3.eth.getChainId(); + + tx = { + from, + gas: numberToHex(gas), + to: contract, + data: callData, + gasPrice: numberToHex(gasPrice), + chainId: numberToHex(chainId), + } + + if (nonce) { + tx.nonce = numberToHex(parseFloat(nonce)); + } + } + + if (accessList && accessList.trim() != "") { + tx.accessList = JSON.parse(access); + } + + if (parseFloat(maxPriorityFeePerGasGwei) > 0 && parseFloat(maxFeePerGasGwei) > 0) { + tx.maxFeePerGas = testManager.web3.utils.toWei(maxFeePerGasGwei, 'gwei'); + tx.maxPriorityFeePerGas = testManager.web3.utils.toWei(maxPriorityFeePerGasGwei, 'gwei'); + } + + if (parseFloat(value) > 0) { + tx.value = testManager.web3.utils.toWei(value.toString(), 'ether'); + } + + await this.estimateGas(tx, testManager, context); + + try { + const { signedTx, receipt } = await this.sendTransaction(tx, testManager, context, notSign, notSend); + return { result: { signedTx }, receipt, tx }; + } catch (e) { + console.log("sendTransaction error", e) + const ret = await instance.methods[method](...args).call({ from, gas: tx.gas }); + throw new Error(ret); + } + } + } +} diff --git a/packages/testcases/tests/actions/CallOperationAction.js b/packages/testcases/tests/actions/CallOperationAction.js new file mode 100644 index 0000000..6213314 --- /dev/null +++ b/packages/testcases/tests/actions/CallOperationAction.js @@ -0,0 +1,64 @@ +import { Action } from './Action.js'; + +export class CallOperationAction extends Action { + async execute(testManager, context) { + const { aspectID, operationData, isCall, gas, callData } = testManager.replaceVariables( + this.action.options, + context, + ); + + const data = testManager.replaceNestedVariables(operationData, context, '0x'); + + const aspectInstance = new testManager.web3.atl.Aspect(aspectID); + let operationEncoded; + if (callData) { + operationEncoded = callData; + } else { + operationEncoded = aspectInstance.operation(data).encodeABI(); + } + + const from = this.getAccount(testManager, context); + + if (isCall) { + // Call Operation + const result = await testManager.web3.eth.call({ + to: testManager.ARTELA_ADDRESS, // contract address + data: operationEncoded + }); + return { result: { ret: result } }; + } else { + const tx = { + from, + to: testManager.ARTELA_ADDRESS, + gas, + data: operationEncoded, + }; + + await this.estimateGas(tx, testManager, context); + + try { + const { receipt } = await this.sendTransaction(tx, testManager, context); + return { result: null, receipt, tx }; + } catch (e) { + const ret = await testManager.web3.eth.call({ + from, + to: testManager.ARTELA_ADDRESS, + data: operationEncoded + }); + throw new Error(ret); + } + } + } + + extractAllPlaceholders(str) { + const regex = /\$([a-zA-Z0-9_]+)/g; + let matches; + const results = []; + + while ((matches = regex.exec(str)) !== null) { + results.push(matches[1]); + } + + return results; + } +} diff --git a/packages/testcases/tests/actions/ChangeVersionAction.js b/packages/testcases/tests/actions/ChangeVersionAction.js new file mode 100644 index 0000000..4595d8b --- /dev/null +++ b/packages/testcases/tests/actions/ChangeVersionAction.js @@ -0,0 +1,21 @@ +import { Action } from './Action.js'; + +export class ChangeVersionAction extends Action { + async execute(testManager, context) { + const { account, aspect, version, gas } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + const aspectCore = new testManager.web3.atl.aspectCore(); + const changeVersion = aspectCore.methods.changeVersion(aspect, account, version); + + const tx = { + gas, + from, + to: testManager.ARTELA_ADDRESS, + data: changeVersion.encodeABI(), + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + return { result: null, receipt, tx }; + } +} diff --git a/packages/testcases/tests/actions/CreateAccountsAction.js b/packages/testcases/tests/actions/CreateAccountsAction.js new file mode 100644 index 0000000..c167080 --- /dev/null +++ b/packages/testcases/tests/actions/CreateAccountsAction.js @@ -0,0 +1,34 @@ +import { Action } from './Action.js'; + +export class CreateAccountsAction extends Action { + async execute(testManager, context) { + const { fundingAmount, accountNumber } = testManager.replaceVariables( + this.action.options, + context, + ); + const accounts = []; + + const from = this.getAccount(testManager, context); + + for (let i = 0; i < accountNumber; i++) { + const account = testManager.web3.eth.accounts.create(); + + accounts.push(account); + + const fundAmount = Array.isArray(fundingAmount) ? fundingAmount[i] : fundingAmount; + const tx = { + from, + to: account.address, + value: testManager.web3.utils.toWei(fundAmount.toString(), 'ether'), + gas: '21000', + }; + + await this.estimateGas(tx, testManager, context); + await this.sendTransaction(tx, testManager, context); + } + + testManager.storeAccounts(accounts); + + return { result: { accounts: accounts.map(acc => acc.address) } }; + } +} diff --git a/packages/testcases/tests/actions/DeployAspectAction.js b/packages/testcases/tests/actions/DeployAspectAction.js new file mode 100644 index 0000000..041882a --- /dev/null +++ b/packages/testcases/tests/actions/DeployAspectAction.js @@ -0,0 +1,30 @@ +import { Action } from './Action.js'; + +export class DeployAspectAction extends Action { + async execute(testManager, context) { + const { args, gas } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const aspect = new testManager.web3.atl.Aspect(); + const deploy = await aspect.deploy({ + data: args.code, + paymaster: args.paymaster || from, + initData: args.initData || '0x', + proof: args.proof || '0x', + joinPoints: args.joinPoints || [], + properties: args.properties || [], + }); + + const tx = { + from, + gas, + data: deploy.encodeABI(), + to: testManager.ARTELA_ADDRESS, + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + + return { result: { aspectId: receipt.aspectAddress }, receipt, tx }; + } +} diff --git a/packages/testcases/tests/actions/DeployContractAction.js b/packages/testcases/tests/actions/DeployContractAction.js new file mode 100644 index 0000000..4107634 --- /dev/null +++ b/packages/testcases/tests/actions/DeployContractAction.js @@ -0,0 +1,23 @@ +import { Action } from './Action.js'; + +export class DeployContractAction extends Action { + async execute(testManager, context) { + const { code, args, gas, abi } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const contract = new testManager.web3.eth.Contract(abi); + + const deploy = contract.deploy({ data: code, arguments: args }); + + const tx = { + from, + data: deploy.encodeABI(), + gas, + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + + return { result: { contractAddress: receipt.contractAddress }, receipt, tx }; + } +} diff --git a/packages/testcases/tests/actions/DeployMultiAspectsAction.js b/packages/testcases/tests/actions/DeployMultiAspectsAction.js new file mode 100644 index 0000000..eceba91 --- /dev/null +++ b/packages/testcases/tests/actions/DeployMultiAspectsAction.js @@ -0,0 +1,38 @@ +import { Action } from './Action.js'; + +export class DeployMultiAspectsAction extends Action { + async execute(testManager, context) { + const { args, gas, count } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const aspect = new testManager.web3.atl.Aspect(); + const deploy = await aspect.deploy({ + data: args.code, + paymaster: args.paymaster || from, + initData: args.initData || '0x', + proof: args.proof || '0x', + joinPoints: args.joinPoints || [], + properties: args.properties || [], + }); + + let txs = []; + for (let i = 0; i < count; i++) { + const tx = { + from, + gas, + data: deploy.encodeABI(), + to: testManager.ARTELA_ADDRESS, + }; + + await this.estimateGas(tx, testManager, context); + txs.push(tx); + } + + const [receipts, failures] = await this.sendTransactions(from, txs, testManager, context, 20); + const ids = []; + for (const receipt of receipts) { + ids.push(receipt.contractAddress); + } + return { result: { ids, failures }, receipt: null, tx: null }; + } +} diff --git a/packages/testcases/tests/actions/DeployMultiContractsAction.js b/packages/testcases/tests/actions/DeployMultiContractsAction.js new file mode 100644 index 0000000..ad97506 --- /dev/null +++ b/packages/testcases/tests/actions/DeployMultiContractsAction.js @@ -0,0 +1,31 @@ +import { Action } from './Action.js'; + +export class DeployMultiContractsAction extends Action { + async execute(testManager, context) { + const { code, args, gas, abi, count } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const contract = new testManager.web3.eth.Contract(abi); + + const deploy = contract.deploy({ data: code, arguments: args }); + + let txs = []; + for (let i = 0; i < count; i++) { + const tx = { + from, + data: deploy.encodeABI(), + gas, + }; + + await this.estimateGas(tx, testManager, context); + txs.push(tx); + } + const [receipts, failures] = await this.sendTransactions(from, txs, testManager, context, 20); + + const addrs = []; + for (const receipt of receipts) { + addrs.push(receipt.contractAddress); + } + return { result: { addrs, failures }, receipt: null, tx: null }; + } +} diff --git a/packages/testcases/tests/actions/GetSessionKeyCallDataAction.js b/packages/testcases/tests/actions/GetSessionKeyCallDataAction.js new file mode 100644 index 0000000..23e1e2a --- /dev/null +++ b/packages/testcases/tests/actions/GetSessionKeyCallDataAction.js @@ -0,0 +1,93 @@ +import { Action } from './Action.js'; +import { BigNumber } from 'bignumber.js'; + +export class GetSessionKeyCallDataAction extends Action { + async execute(testManager, context) { + const { sKeyAddress, abi, contract, method, args, aspectID, signedTx, operation } = testManager.replaceVariables(this.action.options, context); + + const from = this.getAccount(testManager, context); + + const sKey = this.rmPrefix(sKeyAddress); + const sKeyContract = this.rmPrefix(contract); + + const instance = new testManager.web3.eth.Contract(abi, contract); + const contractCall = instance.methods[method](...args); + const contractCallData = contractCall.encodeABI(); + const contractCallMethod = this.rmPrefix(contractCallData).substring(0, 8); + + if (operation == "reg") { + const currentBlockHeight = await testManager.web3.eth.getBlockNumber(); + const expireBlockHeight = currentBlockHeight + 100; // ~10s + + const op = + "0x0001" + + sKey + + sKeyContract + + "0001" + contractCallMethod + + this.rmPrefix(testManager.web3.eth.abi.encodeParameter('uint256', expireBlockHeight)).slice(48, 64); + + const aspectInstance = new testManager.web3.atl.Aspect(aspectID); + const sessionKeyRegData = aspectInstance.operation(op).encodeABI(); + + return { + result: { sessionKeyRegData: sessionKeyRegData } + }; + } else if (operation == "call") { + const chainID = await testManager.web3.eth.getChainId(); + let validationData = "0x" + + this.rmPrefix(from) + + this.padStart(this.rmPrefix(signedTx.r), 64, "0") + + this.padStart(this.rmPrefix(signedTx.s), 64, "0") + + this.rmPrefix(this.getOriginalV(signedTx.v, chainID)); + + console.log("validationData : ", validationData); + console.log("contractCallData : ", contractCallData); + let encodedData = testManager.web3.eth.abi.encodeParameters(['bytes', 'bytes'], + [validationData, contractCallData]); + + // new calldata: magic prefix + checksum(encodedData) + encodedData(validation data + raw calldata) + // 0xCAFECAFE is a magic prefix, + encodedData = '0xCAFECAFE' + testManager.web3.utils.keccak256(encodedData).slice(2, 10) + encodedData.slice(2); + console.log("encodedData : ", encodedData); + + return { + result: { callData: encodedData } + }; + } + } + + rmPrefix(data) { + if (data.startsWith('0x')) { + return data.substring(2, data.length); + } else { + return data; + } + } + + padStart(str, targetLength, padString) { + targetLength = Math.max(targetLength, str.length); + padString = String(padString || ' '); + + if (str.length >= targetLength) { + return str; + } else { + targetLength = targetLength - str.length; + if (targetLength > padString.length) { + padString += padString.repeat(targetLength / padString.length); + } + return padString.slice(0, targetLength) + str; + } + } + + getOriginalV(hexV, chainId_) { + const v = new BigNumber(hexV, 16); + const chainId = new BigNumber(chainId_); + const chainIdMul = chainId.multipliedBy(2); + + const originalV = v.minus(chainIdMul).minus(8); + + const originalVHex = originalV.toString(16); + + return originalVHex; + } +} diff --git a/packages/testcases/tests/actions/JsonRPCAction.js b/packages/testcases/tests/actions/JsonRPCAction.js new file mode 100644 index 0000000..70ece8d --- /dev/null +++ b/packages/testcases/tests/actions/JsonRPCAction.js @@ -0,0 +1,93 @@ +import { Action } from './Action.js'; +import fetch from 'node-fetch'; +import Web3Utils from '@artela/web3-utils'; +const numberToHex = Web3Utils.numberToHex; +const hexToNumber = Web3Utils.hexToNumber; + +export class JsonRPCAction extends Action { + async execute1(testManager, context) { + const { method, params, wait } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + const methodParts = method.split('_'); + + let rpcMethod = testManager.web3; + for (const part of methodParts) { + rpcMethod = rpcMethod[part]; + } + + let data = []; + if (params && params.length > 0) { + data = testManager.replaceNestedVariables(params, context); + } + + const ret = await rpcMethod(...data); + return { + result: { ret } + }; + } + + async execute(testManager, context) { + const { method, params, wait } = testManager.replaceVariables(this.action.options, context); + + let data = []; + if (params && params.length > 0) { + data = testManager.replaceNestedVariables(params, context); + + data = data.map(item => { + if (typeof item === 'string' && item.startsWith('numberToHex(') && item.endsWith(')')) { + const numberStr = item.slice('numberToHex('.length, -1); + const number = parseInt(numberStr, 10); + + return numberToHex(number); + } else if (typeof item === 'string' && item.startsWith('hexToNumber(') && item.endsWith(')')) { + const hexStr = item.slice('numberToHex('.length, -1); + + return hexToNumber(hexStr); + } + + try { + const parsed = JSON.parse(item); + if (typeof parsed === 'object' && parsed !== null) { + return parsed; + } + } catch (e) { + // ignore + } + + return item; + }); + } + + const payload = { + jsonrpc: '2.0', + method: method, + params: data, + id: new Date().getTime() + }; + + if (wait && wait > 0) { + await new Promise(r => setTimeout(r, wait)); + } + + try { + const rpcUrl = testManager.nodeUrl; + const response = await fetch(rpcUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify(payload), + }); + + const data = await response.json(); + if (data.error) { + throw new Error(data.error.message); + } + + return { result: { ret: data.result } }; + } catch (error) { + console.error('RPC Error:', error); + throw error; + } + } +} diff --git a/packages/testcases/tests/actions/QueryAspectBindingsAction.js b/packages/testcases/tests/actions/QueryAspectBindingsAction.js new file mode 100644 index 0000000..da83933 --- /dev/null +++ b/packages/testcases/tests/actions/QueryAspectBindingsAction.js @@ -0,0 +1,13 @@ +import { Action } from './Action.js'; + +export class QueryAspectBindingsAction extends Action { + async execute(testManager, context) { + const { aspect } = testManager.replaceVariables(this.action.options, context); + + const from = this.getAccount(testManager, context); + const aspectCore = new testManager.web3.atl.aspectCore(); + let contracts = await aspectCore.methods.boundAddressesOf(aspect).call({ from }) + + return { result : { contracts }, receipt: null, tx: null }; + } +} diff --git a/packages/testcases/tests/actions/QueryBasicAction.js b/packages/testcases/tests/actions/QueryBasicAction.js new file mode 100644 index 0000000..bbeeed8 --- /dev/null +++ b/packages/testcases/tests/actions/QueryBasicAction.js @@ -0,0 +1,28 @@ +import { Action } from './Action.js'; + +export class QueryBasicAction extends Action { + async execute(testManager, context) { + const { queryAccount, queryContract } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const nonceFrom = await testManager.web3.atl.getTransactionCount(from); + const balanceFrom = await testManager.web3.atl.getBalance(from); + const balance = await testManager.web3.atl.getBalance(queryAccount); + + return { + result: { + nonceFrom: "0x" + this.addLeadingZeroIfNeeded(nonceFrom.toString(16)), + balanceFrom: "0x" + this.addLeadingZeroIfNeeded(BigInt(balanceFrom).toString(16)), + sender: from, + balance: balance, + } + }; + } + + addLeadingZeroIfNeeded(hexString) { + if (hexString.length % 2 !== 0) { + hexString = '0' + hexString; + } + return hexString; + } +} diff --git a/packages/testcases/tests/actions/QueryContractBindingsAction.js b/packages/testcases/tests/actions/QueryContractBindingsAction.js new file mode 100644 index 0000000..e8ee8d5 --- /dev/null +++ b/packages/testcases/tests/actions/QueryContractBindingsAction.js @@ -0,0 +1,20 @@ +import { Action } from './Action.js'; + +export class QueryContractBindingsAction extends Action { + async execute(testManager, context) { + const { contract } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + const aspectCore = new testManager.web3.atl.aspectCore(); + let bindingResult = await aspectCore.methods.aspectsOf(contract).call({ from }) + let aspects = []; + for (const aspect of bindingResult) { + aspects.push({ + aspectId: aspect.aspectId, + priority: aspect.priority, + version: aspect.version + }); + } + + return { result: { aspects }, receipt: null, tx: null }; + } +} diff --git a/packages/testcases/tests/actions/SubscriptionAction.js b/packages/testcases/tests/actions/SubscriptionAction.js new file mode 100644 index 0000000..e95259f1 --- /dev/null +++ b/packages/testcases/tests/actions/SubscriptionAction.js @@ -0,0 +1,242 @@ +import { Action } from './Action.js'; + +export class SubscriptionAction extends Action { + constructor(action) { + super(action); + this.stopped = true; + } + + async execute(testManager, context) { + const { contract, abi, method, event, args, gas, loop, duration } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + this.stopped = false; + // (async () => { + // await this.sendTxs(testManager, contract, abi, method, args, gas, from); + // })(); + this.sendTxs(testManager, contract, abi, method, args, gas, from); + + const errors = []; + const testNewBlockHeaders = await this.subNewBlockHeaders(testManager, duration, loop); + if (!testNewBlockHeaders) { + const err = "failed to test subscribe newBlockHeaders;" + errors.push(err); + } + + const testPendingTransactions = await this.subPendingTransactions(testManager, duration, loop); + if (!testPendingTransactions) { + const err = "failed to test subscribe pendingTransactions;" + errors.push(err); + } + + const testLogs = await this.subLogs(testManager, duration, loop, contract); + if (!testLogs) { + const err = "failed to test subscribe logs;" + errors.push(err); + } + + const testContractEvents = await this.subContractEvents(testManager, duration, loop, contract, abi, event); + if (!testContractEvents) { + const err = "failed to test subscribe contract events;" + errors.push(err); + } + + // syncing is not implemented + // const testSyncing = await this.subSyncing(); + // if (!testContractEvents) { + // err = "failed to test subscribe syncing;" + // ret.push(err); + // } + this.stopped = true; + + return { result: { errors }, receipt: null, tx: null }; + } + + async sendTxs(testManager, contract, abi, method, args, gas, from) { + // Get contract ABI + const instance = new testManager.web3.eth.Contract(abi, contract); + const data = instance.methods[method](...args).encodeABI() + + for (; !this.stopped;) { + const tx = { + gas, + from, + to: contract, + data: data + }; + + await this.estimateGas(tx, testManager, context); + const { signedTx, receipt } = await this.sendTransaction(tx, testManager); + if (!receipt || !receipt.status) { + console.log("sending tx failed", receipt) + throw new Error("failed to send tx", signedTx.transactionHash) + } + } + } + + async subNewBlockHeaders(testManager, duration, loop) { + for (let i = 0; i < loop; i++) { + let passed = false; + console.log('subscribe newBlockHeaders', i); + const subscription = testManager.ws.eth.subscribe('newBlockHeaders', (error, blockHeader) => { + if (!error) { + console.log('New Block Received:', blockHeader.number); + passed = true; + } else { + console.error('Error:', error); + throw error; + } + }); + + await new Promise(r => setTimeout(r, duration)); + + subscription.unsubscribe((error, success) => { + if (success) { + console.log('unsubscribed from newBlockHeaders', i, "!\n"); + } else { + console.error('Unsubscribe newBlockHeaders error:', error); + throw error; + } + }); + + if (!passed) { + return false; + } + } + return true; + } + + async subPendingTransactions(testManager, duration, loop) { + for (let i = 0; i < loop; i++) { + let passed = false; + console.log('subscribe pendingTransactions', i); + const subscription = testManager.ws.eth.subscribe('pendingTransactions', (error, transactionHash) => { + if (!error) { + passed = true; + console.log('Pending Transaction:', transactionHash); + } else { + console.error('Error:', error); + } + }); + + await new Promise(r => setTimeout(r, duration)); + + subscription.unsubscribe((error, success) => { + if (success) { + console.log('unsubscribed from pendingTransactions', i, "!\n"); + } else { + console.error('Unsubscribe pendingTransactions error:', error); + throw error; + } + }); + + if (!passed) { + return false; + } + } + return true; + } + + async subLogs(testManager, duration, loop, contractAddress) { + for (let i = 0; i < loop; i++) { + let passed = false; + console.log('subscribe logs'); + const subscription = testManager.ws.eth.subscribe('logs', { + address: contractAddress + }, (error, log) => { + if (!error) { + passed = true; + console.log('Log received:', log.id); + } else { + console.error('Error:', error); + } + }); + + await new Promise(r => setTimeout(r, duration)); + + subscription.unsubscribe((error, success) => { + if (success) { + console.log('unsubscribed from logs!', i, "\n"); + } else { + console.error('Unsubscribe logs error:', error); + throw error; + } + }); + + if (!passed) { + return false; + } + } + return true; + } + + async subContractEvents(testManager, duration, loop, contractAddress, abi, event) { + const contract = new testManager.ws.eth.Contract(abi, contractAddress); + + for (let i = 0; i < loop; i++) { + let passed = false; + console.log('subscribe specified contact event', i); + const subscription = contract.events[event]({ + filter: { /* otpion: filter option */ }, + fromBlock: 'latest' + }, (error, event) => { + if (!error) { + passed = true; + console.log('Event received:', event.id); + } else { + console.error('Error:', error); + } + }); + + await new Promise(r => setTimeout(r, duration)); + + subscription.unsubscribe((error, success) => { + if (success) { + console.log('unsubscribed specified contact event', i, '!\n'); + } else { + console.error('Unsubscribe specified contact event error:', error); + throw error; + } + }); + + if (!passed) { + return false; + } + } + return true; + } + + async subSyncing(testManager, duration, loop) { + for (let i = 0; i < loop; i++) { + let passed = false; + console.log('subscribe syncing', i); + const subscription = testManager.ws.eth.subscribe('syncing', (error, syncStatus) => { + if (!error) { + if (syncStatus) { + console.log('Node is syncing:', syncStatus); + } else { + console.log('Node is synced and not syncing.'); + } + } else { + console.error('Error:', error); + } + }); + + await new Promise(r => setTimeout(r, duration)); + + subscription.unsubscribe((error, success) => { + if (success) { + console.log('unsubscribed from syncing', i, '!\n'); + } else { + console.error('Unsubscribe syncing error:', error); + throw error; + } + }); + + if (!passed) { + return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/packages/testcases/tests/actions/TransferAction.js b/packages/testcases/tests/actions/TransferAction.js new file mode 100644 index 0000000..a25524f --- /dev/null +++ b/packages/testcases/tests/actions/TransferAction.js @@ -0,0 +1,19 @@ +import { Action } from './Action.js'; + +export class TransferAction extends Action { + async execute(testManager, context) { + const { amount, to } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + const tx = { + from, + to: to, + value: testManager.web3.utils.toWei(amount.toString(), 'ether'), + gas: 'auto', + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + + return { result: null, receipt, tx }; + } +} diff --git a/packages/testcases/tests/actions/UnbindAspectAction.js b/packages/testcases/tests/actions/UnbindAspectAction.js new file mode 100644 index 0000000..5c1409a --- /dev/null +++ b/packages/testcases/tests/actions/UnbindAspectAction.js @@ -0,0 +1,21 @@ +import { Action } from './Action.js'; + +export class UnbindAspectAction extends Action { + async execute(testManager, context) { + const { account, aspect, gas } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + const aspectCore = new testManager.web3.atl.aspectCore(); + const unbind = aspectCore.methods.unbind(aspect, account); + + const tx = { + gas, + from, + to: testManager.ARTELA_ADDRESS, + data: unbind.encodeABI(), + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + return { result: null, receipt, tx }; + } +} diff --git a/packages/testcases/tests/actions/UpgradeAspectAction.js b/packages/testcases/tests/actions/UpgradeAspectAction.js new file mode 100644 index 0000000..0dfb043 --- /dev/null +++ b/packages/testcases/tests/actions/UpgradeAspectAction.js @@ -0,0 +1,27 @@ +import { Action } from './Action.js'; + +export class UpgradeAspectAction extends Action { + async execute(testManager, context) { + const { aspect, args, gas } = testManager.replaceVariables(this.action.options, context); + const from = this.getAccount(testManager, context); + + const instance = new testManager.web3.atl.Aspect(aspect); + const upgrade = await instance.upgrade({ + data: args.code, + joinPoints: args.joinPoints || [], + properties: args.properties || [], + }); + + const tx = { + from, + gas, + data: upgrade.encodeABI(), + to: testManager.ARTELA_ADDRESS, + }; + + await this.estimateGas(tx, testManager, context); + const { receipt } = await this.sendTransaction(tx, testManager, context); + + return { result: null, receipt, tx }; + } +} diff --git a/packages/testcases/tests/bese-test.js b/packages/testcases/tests/bese-test.js index 9423152..00509b1 100644 --- a/packages/testcases/tests/bese-test.js +++ b/packages/testcases/tests/bese-test.js @@ -46,6 +46,10 @@ function padStart(str, targetLength, padString) { } function toPaddedHexString(num) { + if (typeof num === 'string') { + num = new BigNumber(num, 10); + } + let hex = num.toString(16); if (hex.length % 2 !== 0) { @@ -122,11 +126,13 @@ export async function DeployContract({ web3.eth.accounts.wallet.add(account.privateKey); const nonceVal = await web3.eth.getTransactionCount(account.address); + console.log(`Deploy contract with ${account.address}`); + const tokenTx = { from: account.address, data: tokenDeploy.encodeABI(), nonce: nonceVal, - gas + gas: await tokenDeploy.estimateGas({from: account.address}) } const signedTokenTx = await web3.eth.accounts.signTransaction(tokenTx, account.privateKey); @@ -141,6 +147,7 @@ export async function DeployAspect({ skFile = DefPrivateKeyPath, gas = DefGasLimit }) { + console.log(`============= join points ${joinPoints} =============`) const ARTELA_ADDR = "0x0000000000000000000000000000000000A27E14"; const web3 = ConnectToANode(nodeConfig); @@ -177,7 +184,7 @@ export async function DeployAspect({ data: deploy.encodeABI(), to: ARTELA_ADDR, gasPrice, - gas + gas: await deploy.estimateGas({from: account.address}) } const signedTx = await web3.atl.accounts.signTransaction(tx, account.privateKey); return await web3.atl.sendSignedTransaction(signedTx.rawTransaction); @@ -233,7 +240,7 @@ export async function UpgradeAspect({ data: deploy.encodeABI(), to: ARTELA_ADDR, gasPrice, - gas + gas: await deploy.estimateGas({from: account.address}) } @@ -267,6 +274,8 @@ export async function BindAspect({ web3.eth.accounts.wallet.add(sender.privateKey); + console.log(`Bind aspect with ${sender.address}`); + // --contract {smart-contract-address} if (!contractAddress || contractAddress === 'undefined') { throw new Error("'contractAddress' cannot be empty, please set by the parameter ' 0xxxx'") @@ -297,7 +306,7 @@ export async function BindAspect({ data: bind.encodeABI(), gasPrice, to: ASPECT_ADDR, - gas + gas: await bind.estimateGas({from: sender.address}) } const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); return await web3.eth.sendSignedTransaction(signedTx.rawTransaction); @@ -345,7 +354,7 @@ export async function UnBindAspect({ data: bind.encodeABI(), gasPrice, to: ASPECT_ADDR, - gas + gas: await bind.estimateGas({from: sender.address}) } const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); @@ -519,15 +528,16 @@ export async function SendUnsignedTx({ const nonce = await web3.eth.getTransactionCount(sender.address); const contractCallData = instance.encodeABI(); + gas = 1_000_000; + const orgTx = { from: sender.address, nonce, gasPrice, - gas: 8000000, + gas, data: contractCallData, to: contract, chainId, - gasLimit: 8000000, } const signedTx = await web3.eth.accounts.signTransaction(orgTx, sender.privateKey); @@ -551,9 +561,8 @@ export async function SendUnsignedTx({ data: encodedData, nonce:toPaddedHexString(nonce), gasPrice:toPaddedHexString(gasPrice), - gas:toPaddedHexString(gas), + gasLimit:toPaddedHexString(gas), chainId: toPaddedHexString(chainId), - gasLimit: toPaddedHexString(DefGasLimit), } if (value !== "") { @@ -614,7 +623,7 @@ export async function SendTx({ to: contract, data: instance.encodeABI(), gasPrice, - gas + gas: await instance.estimateGas({from: sender.address}) } if (value !== "") { tx.value = value @@ -653,14 +662,14 @@ export async function EntryPoint({ } const aspectInstance = new web3.atl.Aspect(aspectId); - const encodeABI = aspectInstance.operation(operationData).encodeABI(); + const operation = aspectInstance.operation(operationData); const tx = { from: sender.address, to: ASPECT_ADDR, - data: encodeABI, + data: operation.encodeABI(), gasPrice, - gas: 20_000_000 + gas: await operation.estimateGas({from: sender.address}) } const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); @@ -672,7 +681,7 @@ export async function EntryPoint({ return await web3.eth.call({ to: ASPECT_ADDR, // contract address - data: encodeABI + data: operation.encodeABI() }); } diff --git a/packages/testcases/tests/context-key-check.test.js b/packages/testcases/tests/context-key-check.test.js index 861d54d..1beabb7 100644 --- a/packages/testcases/tests/context-key-check.test.js +++ b/packages/testcases/tests/context-key-check.test.js @@ -68,31 +68,16 @@ const entryPointTest = async (contract, key) => { } -const result = await DeployContract({ +let result = await DeployContract({ abiPath: "../build/contract/Context.abi", bytePath: "../build/contract/Context.bin" }) assert.ok(result.contractAddress, "Deploy Storage Contract fail"); /// Verify check start---------------------------------------------------------------- -const VerifyCheck = async (contractObj, joinPoint, key) => { - - const aspect = await DeployAspect({ - wasmPath: "../build/context-key-check.wasm", joinPoints: [joinPoint],properties: [ - { 'key': 'Broker', 'value': contractObj.from }], - }) - const bindResult = await BindAspect({ - abiPath, contractAddress: contractObj.contractAddress, aspectId: aspect.aspectAddress - }) - // bind eoa - const bindResult2 = await BindAspect({ - abiPath, contractAddress: contractObj.from, aspectId: aspect.aspectAddress - }) +console.log('======================== Verify Tx Check ========================') - const boundAddrs = await BoundAddressesOf({aspectId: aspect.aspectAddress}) - console.log("==== boundAddrs ===", boundAddrs) - assert.ok(bindResult.status, 'Bind aspect fail') - assert.ok(bindResult2.status, 'Bind aspect fail') +const VerifyCheck = async (contractObj, joinPoint, key) => { const result = await SendUnsignedTxTest(contractObj.contractAddress, key) assert.ok(!result, `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) } @@ -101,6 +86,25 @@ const VerifyCheckResult = { "joinPoint": "VerifyTx", "accessLimitKeys": ["block.header.parentHash", "block.header.miner", "block.header.transactionsRoot", "block.header.timestamp", "tx.chainId", "tx.bytes", "tx.hash", "tx.sig.v", "tx.sig.r", "tx.sig.s", "tx.from", "tx.index", "msg.from", "msg.to", "msg.value", "msg.gas", "msg.input", "msg.index", "msg.result.ret", "msg.result.gasUsed", "msg.result.error", "receipt.status", "receipt.logs", "receipt.gasUsed", "receipt.cumulativeGasUsed", "receipt.bloom"] } + +const aspect = await DeployAspect({ + wasmPath: "../build/context-key-check.wasm", joinPoints: ['VerifyTx'],properties: [ + { 'key': 'Broker', 'value': result.from }], +}) +const bindResult = await BindAspect({ + abiPath, contractAddress: result.contractAddress, aspectId: aspect.aspectAddress +}) + +// bind eoa +const bindResult2 = await BindAspect({ + abiPath, contractAddress: result.from, aspectId: aspect.aspectAddress +}) + +const boundAddrs = await BoundAddressesOf({aspectId: aspect.aspectAddress}) +console.log("==== boundAddrs ===", boundAddrs) +assert.ok(bindResult.status, 'Bind aspect fail') +assert.ok(bindResult2.status, 'Bind aspect fail') + for (var i in VerifyCheckResult.accessLimitKeys) { await VerifyCheck(result, VerifyCheckResult.joinPoint, VerifyCheckResult.accessLimitKeys[i]) } @@ -109,9 +113,11 @@ for (var i in VerifyCheckResult.accessLimitKeys) { /// operation check start---------------------------------------------------------------- +console.log('======================== Operation Check ========================') + const operationKeys = { "joinPoint": "Operation", - "accessLimitKeys": ["msg.from", "msg.to", "msg.value", "msg.gas", "msg.input", "msg.index", "msg.result.ret", "msg.result.gasUsed", "msg.result.error", "receipt.status", "receipt.logs", "receipt.gasUsed", "receipt.cumulativeGasUsed", "receipt.bloom"] + "accessLimitKeys": ["msg.index", "msg.result.ret", "msg.result.gasUsed", "msg.result.error", "receipt.status", "receipt.logs", "receipt.gasUsed", "receipt.cumulativeGasUsed", "receipt.bloom"] } function stringToHex(inputString) { @@ -137,7 +143,6 @@ for (var k in operationKeys.accessLimitKeys) { } /// operation check end---------------------------------------------------------------- - const json = [{ "joinPoint": "preTxExecute", "accessLimitKeys": ["msg.from", "msg.to", "msg.value", "msg.gas", "msg.input", "msg.index", "msg.result.ret", "msg.result.gasUsed", "msg.result.error", "receipt.status", "receipt.logs", "receipt.gasUsed", "receipt.cumulativeGasUsed", "receipt.bloom"] @@ -152,24 +157,29 @@ const json = [{ "accessLimitKeys": ["msg.result.ret", "msg.result.gasUsed", "msg.result.error", "receipt.status", "receipt.logs", "receipt.gasUsed", "receipt.cumulativeGasUsed", "receipt.bloom"] }]; -const JoinPointCheck = async (contractObj, joinPoint, key) => { +const JoinPointCheck = async (contractObj, key) => { + assert.ok(!await sendTxTest(contractObj.contractAddress, key), `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) + assert.ok(!await contractCallTest(contractObj.contractAddress, key), `[CallTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) +} + +for (var p in json) { + console.log(`======================== ${json[p].joinPoint} Check ========================`) + result = await DeployContract({ + abiPath: "../build/contract/Context.abi", bytePath: "../build/contract/Context.bin" + }) + assert.ok(result.contractAddress, "Deploy Storage Contract fail"); const aspect = await DeployAspect({ - wasmPath: "../build/context-key-check.wasm", joinPoints: [joinPoint] + wasmPath: "../build/context-key-check.wasm", joinPoints: [json[p].joinPoint] }) const bindResult = await BindAspect({ - abiPath, contractAddress: contractObj.contractAddress, aspectId: aspect.aspectAddress + abiPath, contractAddress: result.contractAddress, aspectId: aspect.aspectAddress }) assert.ok(bindResult.status, 'Bind aspect fail') - assert.ok(!await sendTxTest(contractObj.contractAddress, key), `[SendTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) - assert.ok(!await contractCallTest(contractObj.contractAddress, key), `[CallTx: unauthorized access test] Test failed, unauthorized key-value pair was accessed without permission`) -} - -for (var p in json) { for (var q in json[p].accessLimitKeys) { - await JoinPointCheck(result, json[p].joinPoint, json[p].accessLimitKeys[q]) + await JoinPointCheck(result, json[p].accessLimitKeys[q]) } } diff --git a/packages/testcases/tests/context-permission-check.test.js b/packages/testcases/tests/context-permission-check.test.js index 0cf957b..4edbbb4 100644 --- a/packages/testcases/tests/context-permission-check.test.js +++ b/packages/testcases/tests/context-permission-check.test.js @@ -83,4 +83,4 @@ const entryPointTest = async (contract, key) => { return false } } -assert.ok(!(await entryPointTest(aspect.aspectAddress,"0x01")), `[entryPoint: normal test] Failed, key-value can't be accessed`) +assert.ok(await entryPointTest(aspect.aspectAddress,"0x01"), `[entryPoint: normal test] Failed, key-value can't be accessed`) diff --git a/packages/testcases/tests/testcases/aspect-binding-test.json b/packages/testcases/tests/testcases/aspect-binding-test.json new file mode 100644 index 0000000..892a3d6 --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-binding-test.json @@ -0,0 +1,301 @@ +{ + "description": "Test bind same aspect with contract and EoA", + "actions": [ + { + "description": "Create new account", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 1 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 1 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Verifier Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "verifierAspect": "receipt.aspectAddress" + } + }, + { + "description": "Upgrade Verifier Aspect", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#VerifierAspect.bytecode", + "properties": [{ "key": "0x12", "value": "0x34" }], + "joinPoints": ["VerifyTx"] + }, + "aspect": "$verifierAspect", + "gas": "auto" + } + }, + { + "description": "Deploy Basic Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Upgrade Basic Aspect", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectCompressed.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"] + }, + "aspect": "$aspectId", + "gas": "auto" + } + }, + { + "description": "Deploy no-joinpoint Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": [], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "output": { + "noJoinPoint": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind verifier version 1 with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 1, + "priority": -1 + } + }, + { + "description": "Bind verifier version 1 again with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + }, + { + "description": "Bind verifier version 2 with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 2, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + }, + { + "description": "Bind verifier version 1 with EoA", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$accounts.0", + "version": 1, + "priority": -1 + } + }, + { + "description": "Bind verifier version 1 again with EoA", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$accounts.0", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + }, + { + "description": "Bind verifier version 2 with EoA", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$accounts.0", + "version": 2, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + }, + { + "description": "Bind no-joinpoint Aspect with EoA", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$noJoinPoint", + "account": "$accounts.0", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect is either for tx or verifier" + } + } + }, + { + "description": "Bind tx Aspect with EoA", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$accounts.0", + "version": 0, + "priority": -1 + }, + "expect": { + "error": { + "include": "only verifier aspect can be bound with eoa" + } + } + }, + { + "description": "Bind no-joinpoint Aspect with Contract", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$noJoinPoint", + "account": "$accounts.0", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect is either for tx or verifier" + } + } + }, + { + "description": "Bind tx aspect version 1 with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + } + }, + { + "description": "Bind tx aspect version 1 again with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + }, + { + "description": "Bind tx aspect version 2 with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 2, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/aspect-core-fail-cases-test.json b/packages/testcases/tests/testcases/aspect-core-fail-cases-test.json new file mode 100644 index 0000000..0df1731 --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-core-fail-cases-test.json @@ -0,0 +1,337 @@ +{ + "description": "Test aspect-core fail cases", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Init fail Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": [], + "code": "#InitFailAspect.bytecode" + }, + "gas": "auto" + }, + "expect": { + "error": { + "include": "execution reverted: init fail" + } + } + }, + { + "description": "Deploy Basic Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Verifier Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "verifierAspect": "receipt.aspectAddress" + } + }, + { + "description": "Un-authorized upgrade", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectCompressed.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"] + }, + "aspect": "$aspectId", + "gas": "auto" + }, + "expect": { + "error": { + "include": "aspect ownership validation failed" + } + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Un-authorized binding", + "account": "$accounts.1", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "contract ownership validation failed" + } + } + }, + { + "description": "Bind with non-exist aspect version", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 999, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect version not deployed" + } + } + }, + { + "description": "Bind with non-exist aspect address", + "account": "", + "type": "bind", + "options": { + "aspect": "0x1234567812345678123456781234567812345678", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect not deployed" + } + } + }, + { + "description": "Bind with non-exist contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "0x1234567812345678123456781234567812345678", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "unauthorized EoA account aspect binding" + } + } + }, + { + "description": "Bind with un-authorized EoA account", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$accounts.0", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "unauthorized EoA account aspect binding" + } + } + }, + { + "description": "Check non-exist aspect version", + "account": "", + "type": "aspectVersion", + "options": { + "aspect": "0x1234567812345678123456781234567812345678" + }, + "expect": { + "result.version": { + "eq": "0" + } + } + }, + { + "description": "Check non-exist contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "0x1234567812345678123456781234567812345678" + }, + "expect": { + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check non-exist Aspect bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "0x1234567812345678123456781234567812345678" + }, + "expect": { + "error": { + "include": "aspect not deployed" + } + } + }, + { + "description": "Bind with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Unbind non-exist aspect", + "comment": "Unbind with aspect not bound should just pass, method is idempotent", + "account": "", + "type": "unbind", + "options": { + "aspect": "0x1234567812345678123456781234567812345678", + "account": "$contractAddress" + } + }, + { + "description": "Unbind with not bound aspect", + "comment": "Unbind with aspect not bound should just pass, method is idempotent", + "account": "", + "type": "unbind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress" + } + }, + { + "description": "Change Aspect bind version to a non-exist one", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 999 + }, + "expect": { + "error": { + "include": "given version of aspect does not exist" + } + } + }, + { + "description": "Duplicate binding", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "aspect already bound" + } + } + }, + { + "description": "Change Aspect bind version to a non-exist version", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 999 + }, + "expect": { + "error": { + "include": "given version of aspect does not exist" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-dead-loop-test.json b/packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-dead-loop-test.json new file mode 100644 index 0000000..1b08dee --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-dead-loop-test.json @@ -0,0 +1,107 @@ +{ + "description": "Test A Dead Loop Aspect", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Aspect With Dead Lock", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#DeadLoopAspect.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "error": { + "include": "gas required exceeds allowance" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-large-size-test.json b/packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-large-size-test.json new file mode 100644 index 0000000..0d854da --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-system-contract-cases/aspect-abnormal-large-size-test.json @@ -0,0 +1,163 @@ +{ + "description": "Test Abnormal Large Size Aspect", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Aspect With Size Of 300K", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#LargeSizeAspect300K.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Unbind Aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Upgrade Aspect To New With Size Of 1Mb", + "account": "$accounts.1", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#LargeSizeAspect1M.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall"] + }, + "aspect": "$aspectId", + "gas": "auto" + }, + "expect": { + "error": { + "include": "gas required exceeds allowance" + } + } + }, + { + "description": "Deploy Aspect With Size Of 1Mb", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#LargeSizeAspect1M.bytecode" + }, + "gas": "auto" + }, + "expect": { + "error": { + "include": "gas required exceeds allowance" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-large-number-of-contract-test.json b/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-large-number-of-contract-test.json new file mode 100644 index 0000000..9507dbc --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-large-number-of-contract-test.json @@ -0,0 +1,371 @@ +{ + "description": "Test binding large number of contract", + "actions": [ + { + "description": "Deploy 3000 Contracts", + "account": "", + "type": "deployMultiContracts", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [], + "gas": "800000", + "count": 3000 + }, + "expect": { + "result.failures.length": { + "eq": 0 + }, + "error": "" + }, + "output": { + "addrs": "result.addrs" + } + }, + { + "description": "Deploy Aspect", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "joinPoints": ["PreContractCall"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind 3000 contracts with Aspect", + "account": "", + "type": "bindMultiContracts", + "options": { + "aspect": "$aspectId", + "accounts": "$addrs", + "version": 1, + "priority": -1, + "gas": "1000000", + "count": 3000 + }, + "expect": { + "result.failures.length": { + "eq": 0 + }, + "error": "" + } + }, + { + "description": "Check aspect bindings, expect 3000", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "include": ["$addrs.0", "$addrs.2600", "$addrs.110", "$addrs.2999"] + }, + "result.contracts.length": { + "eq": 3000 + } + } + }, + { + "description": "Check contract No.2600 bindings, expect 1", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.2600" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId", + "version": "1", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Call contract No.2600", + "account": "", + "type": "callContract", + "options": { + "contract": "$addrs.2600", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Unbind Aspect No.2600 with contract", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$addrs.2600" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Check contract No.2600 bindings, expect 0", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.2600" + }, + "expect": { + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check aspect bindings, expect 2999", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "notInclude": "$addrs.2600" + }, + "result.contracts.length": { + "eq": 2999 + } + } + }, + { + "description": "Unbind Aspect No.110 with contract", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$addrs.110" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Check contract No.110 bindings, expect 0", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.110" + }, + "expect": { + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check aspect bindings, expect 2998", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "notInclude": "$addrs.110" + }, + "result.contracts.length": { + "eq": 2998 + } + } + }, + { + "description": "Check contract No.2999 bindings, expect 1", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.2999" + }, + "expect": { + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Unbind Aspect No.2999 with contract", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$addrs.2999" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Check contract No.2999 bindings, expect 0", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.2999" + }, + "expect": { + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check aspect bindings, expect 2997", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "notInclude": "$addrs.2999" + }, + "result.contracts.length": { + "eq": 2997 + } + } + }, + { + "description": "Unbind Aspect No.0 with contract", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$addrs.0" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Check contract No.0 bindings, expect 0", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.0" + }, + "expect": { + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check aspect bindings, expect 2996", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "notInclude": "$addrs.0" + }, + "result.contracts.length": { + "eq": 2996 + } + } + }, + { + "description": "Re-bind contract No.2999 with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$addrs.2999", + "version": 1, + "priority": -1, + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Check contract No.2999 bindings, expect 1", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$addrs.2999" + }, + "expect": { + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Check aspect bindings, expect 2997", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "include": "$addrs.2999" + }, + "result.contracts.length": { + "eq": 2997 + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-reach-limits-test.json b/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-reach-limits-test.json new file mode 100644 index 0000000..44b888e --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-reach-limits-test.json @@ -0,0 +1,172 @@ +{ + "description": "Test binding reach limits", + "actions": [ + { + "description": "Deploy 254 Aspects", + "account": "", + "type": "deployMultiAspects", + "options": { + "args": { + "properties": [], + "joinPoints": ["PreContractCall"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto", + "count": 254 + }, + "output": { + "multiAspects": "result.ids" + }, + "expect": { + "result.failures.length": { + "eq": 0 + } + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind 254 Aspects with contract", + "account": "", + "type": "bindMultiAspects", + "options": { + "aspects": "$multiAspects", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "count": 254, + "gas": "500000" + }, + "expect": { + "result.failures.length": { + "eq": 0 + }, + "error": { + "eq": "" + } + } + },{ + "description": "Deploy 1 Verifier Aspect", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "verifierAspect": "receipt.aspectAddress" + } + },{ + "description": "Bind verifier Aspect with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "eq": "" + } + } + },{ + "description": "Deploy 1 Aspect", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["PreContractCall"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "output": { + "basicAspect": "receipt.aspectAddress" + } + }, + { + "description": "Bind Aspect with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$basicAspect", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "binding limit exceeded" + } + } + }, + { + "description": "Unbind Aspect No.100 with contract", + "account": "", + "type": "unbind", + "options": { + "aspect": "$multiAspects.99", + "account": "$contractAddress" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Bind Aspect with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$basicAspect", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Bind Aspect 100 with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$multiAspects.99", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "binding limit exceeded" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-unbinding-test.json b/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-unbinding-test.json new file mode 100644 index 0000000..814cb28 --- /dev/null +++ b/packages/testcases/tests/testcases/aspect-system-contract-cases/binding-unbinding-test.json @@ -0,0 +1,339 @@ +{ + "description": "Test binding multi aspects and unbinding one of them", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Basic Aspect 1", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId1": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Basic Aspect 2", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId2": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Basic Aspect 3", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId3": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Contract 1", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress1": "receipt.contractAddress" + } + }, + { + "description": "Deploy Contract 2", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress2": "receipt.contractAddress" + } + }, + { + "description": "Bind contract1 with Aspect 1", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId1", + "account": "$contractAddress1", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Bind contract1 with Aspect 2", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId2", + "account": "$contractAddress1", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Bind contract1 with Aspect 3", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId3", + "account": "$contractAddress1", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Bind contract2 with Aspect 2", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId2", + "account": "$contractAddress2", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Check contract1 bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress1" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId1", + "version": "1", + "priority": "-1" + }, + { + "aspectId": "$aspectId2", + "version": "1", + "priority": "-1" + }, + { + "aspectId": "$aspectId3", + "version": "1", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 3 + } + } + }, + { + "description": "Check Aspect 2 bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId2" + }, + "expect": { + "result.contracts": { + "include": ["$contractAddress1", "$contractAddress2"] + }, + "result.contracts.length": { + "eq": 2 + } + } + }, + { + "description": "Call contract 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Unbind Contract 1 Aspect 2", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId2", + "account": "$contractAddress1" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Check contract 1 bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress1" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId1", + "version": "1", + "priority": "-1" + }, + { + "aspectId": "$aspectId3", + "version": "1", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 2 + } + } + }, + { + "description": "Check Aspect 2 bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId2" + }, + "expect": { + "result.contracts": { + "include": ["$contractAddress2"] + }, + "result.contracts.length": { + "eq": 1 + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/basic-compressed-test.json b/packages/testcases/tests/testcases/basic-compressed-test.json new file mode 100644 index 0000000..2327732 --- /dev/null +++ b/packages/testcases/tests/testcases/basic-compressed-test.json @@ -0,0 +1,315 @@ +{ + "description": "Test compressed Aspect basic functionalities", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Basic Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Check aspect version", + "account": "", + "type": "aspectVersion", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.version": { + "eq": "1" + } + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId", + "version": "1", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Check Aspect bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "include": ["$contractAddress"] + }, + "result.contracts.length": { + "eq": 1 + } + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Unbind Aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "notInclude": [ + { + "aspectId": "$aspectId", + "version": "1", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check Aspect bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "notInclude": ["$contractAddress"] + }, + "result.contracts.length": { + "eq": 0 + } + } + }, + { + "description": "Upgrade Basic Aspect", + "account": "$accounts.1", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectCompressed.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"] + }, + "aspect": "$aspectId", + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Check upgraded aspect version", + "account": "", + "type": "aspectVersion", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.version": { + "eq": "2" + } + }, + "output": { + "version": "result.version" + } + }, + { + "description": "Bind with Aspect again", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": 2 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId", + "version": "1", + "priority": "2" + } + ] + }, + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Change Aspect bind version", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 2 + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId", + "version": "2", + "priority": "2" + } + ] + }, + "result.aspects.length": { + "eq": 1 + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/basic-uncompressed-test.json b/packages/testcases/tests/testcases/basic-uncompressed-test.json new file mode 100644 index 0000000..679fcaa --- /dev/null +++ b/packages/testcases/tests/testcases/basic-uncompressed-test.json @@ -0,0 +1,241 @@ +{ + "description": "Test uncompressed Aspect basic functionalities", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Basic Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectNoCompression.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Check aspect version", + "account": "", + "type": "aspectVersion", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.version": { + "eq": "1" + } + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId", + "version": "1", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Check Aspect bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "include": ["$contractAddress"] + }, + "result.contracts.length": { + "eq": 1 + } + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Unbind Aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "notInclude": [ + { + "aspectId": "$aspectId", + "version": "1", + "priority": "2" + } + ] + }, + "result.aspects.length": { + "eq": 0 + } + } + }, + { + "description": "Check Aspect bindings", + "account": "", + "type": "queryAspectBindings", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.contracts": { + "notInclude": ["$contractAddress"] + }, + "result.contracts.length": { + "eq": 0 + } + } + }, + { + "description": "Upgrade Basic Aspect", + "account": "$accounts.1", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectNoCompression.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"] + }, + "aspect": "$aspectId", + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Check upgraded aspect version", + "account": "", + "type": "aspectVersion", + "options": { + "aspect": "$aspectId" + }, + "expect": { + "result.version": { + "eq": "2" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/bind-multiple-verifier-with-contract-test.json b/packages/testcases/tests/testcases/bind-multiple-verifier-with-contract-test.json new file mode 100644 index 0000000..4a73a8b --- /dev/null +++ b/packages/testcases/tests/testcases/bind-multiple-verifier-with-contract-test.json @@ -0,0 +1,77 @@ +{ + "description": "Test multiple verifier binding with contract", + "actions": [ + { + "description": "Deploy Verifier Aspect", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "verifierAspect": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Verifier Aspect2", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "verifierAspect2": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind first verifier Aspect with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 1, + "priority": -1 + } + }, + { + "description": "Bind second verifier Aspect with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect2", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "error": { + "include": "binding limit exceeded" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/change-version-test.json b/packages/testcases/tests/testcases/change-version-test.json new file mode 100644 index 0000000..eabae5c --- /dev/null +++ b/packages/testcases/tests/testcases/change-version-test.json @@ -0,0 +1,234 @@ +{ + "description": "Test change aspect binding version", + "actions": [ + { + "description": "Create new account", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 1 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 1 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Upgrade Aspect to no-joinpoint Aspect", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectCompressed.bytecode", + "properties": [{ "key": "owner", "value": "$accounts.0" }], + "joinPoints": [] + }, + "aspect": "$aspectId", + "gas": "auto" + } + }, + { + "description": "Upgrade Aspect to Basic Aspect", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectCompressed.bytecode", + "properties": [{ "key": "0x12", "value": "0x34" }], + "joinPoints": ["PostContractCall"] + }, + "aspect": "$aspectId", + "gas": "auto" + } + }, + { + "description": "Bind verifier aspect version with EoA", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$accounts.0", + "version": 1, + "priority": -1 + } + }, + { + "description": "Change EoA Aspect bind version to latest version (tx aspect)", + "account": "$accounts.0", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$accounts.0", + "version": 0 + }, + "expect": { + "error": { + "include": "only verifier aspect can be bound with eoa" + } + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind latest aspect version with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 0, + "priority": -1 + } + }, + { + "description": "Change Aspect bind version to no-joinpoint version", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 2 + }, + "expect": { + "error": { + "include": "aspect is either for tx or verifier" + } + } + }, + { + "description": "Change Aspect bind version to verifier version", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1 + } + }, + { + "description": "Deploy Another verifier Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [], + "joinPoints": ["VerifyTx"], + "code": "#VerifierAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "verifierAspect": "receipt.aspectAddress" + } + }, + { + "description": "Bind verifier aspect with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 0, + "priority": -1 + }, + "expect": { + "error": { + "include": "binding limit exceeded" + } + } + }, + { + "description": "Change Aspect bind version to latest version", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 0 + } + }, + { + "description": "Check contract bindings", + "account": "", + "type": "queryContractBindings", + "options": { + "contract": "$contractAddress" + }, + "expect": { + "result.aspects": { + "include": [ + { + "aspectId": "$aspectId", + "version": "3", + "priority": "-1" + } + ] + }, + "result.aspects.length": { + "eq": 1 + } + } + }, + { + "description": "Bind verifier aspect again with contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$verifierAspect", + "account": "$contractAddress", + "version": 0, + "priority": -1 + } + }, + { + "description": "Change Aspect bind version to verifier version", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1 + }, + "expect": { + "error": { + "include": "binding limit exceeded" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/code-validation-test.json b/packages/testcases/tests/testcases/code-validation-test.json new file mode 100644 index 0000000..fe1ef86 --- /dev/null +++ b/packages/testcases/tests/testcases/code-validation-test.json @@ -0,0 +1,183 @@ +{ + "description": "Test aspect code validations", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 1 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 1 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Aspect without exporting start function", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectNoExportStart.bytecode" + } + }, + "expect": { + "error": { + "include": "start section not allowed" + } + } + }, + { + "description": "Deploy Aspect with bulk memory enabled", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectBulkMemoryEnabled.bytecode" + } + }, + "expect": { + "error": { + "include": "bulk memory support is not enabled" + } + } + }, + { + "description": "Deploy Aspect with GC enabled", + "comment": "This case is not failing is because AS implemented the GC themselves, not using the GC opcodes from defined by WASM", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectWithGC.bytecode" + } + } + }, + { + "description": "Deploy Aspect with float numbers", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": [], + "code": "#FloatAspect.bytecode" + } + }, + "expect": { + "error": { + "include": "floating-point support is disabled" + } + } + }, + { + "description": "Deploy normal Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Upgrade to Aspect with bulk memory enabled", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectBulkMemoryEnabled.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"] + }, + "aspect": "$aspectId" + }, + "expect": { + "error": { + "include": "bulk memory support is not enabled" + } + } + }, + { + "description": "Upgrade to Aspect no export start", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#BasicAspectNoExportStart.bytecode", + "properties": [], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"] + }, + "aspect": "$aspectId" + }, + "expect": { + "error": { + "include": "start section not allowed" + } + } + }, + { + "description": "Upgrade to Aspect with float", + "account": "$accounts.0", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#FloatAspect.bytecode", + "properties": [], + "joinPoints": [] + }, + "aspect": "$aspectId" + }, + "expect": { + "error": { + "include": "floating-point support is disabled" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/contract-cases/contract-type-test.json b/packages/testcases/tests/testcases/contract-cases/contract-type-test.json new file mode 100644 index 0000000..cb3af15 --- /dev/null +++ b/packages/testcases/tests/testcases/contract-cases/contract-type-test.json @@ -0,0 +1,315 @@ +{ + "description": "Test Contract Types", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy counter contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress1": "receipt.contractAddress" + } + }, + { + "description": "Call counter contract with legacy", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call counter contract call with legacy", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000", + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Call counter contract with dynamic fee", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000", + "maxFeePerGasGwei": "100", + "maxPriorityFeePerGasGwei": "2" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call counter contract call with dyanmic fee", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000", + "isCall": true, + "maxFeePerGasGwei": "100", + "maxPriorityFeePerGasGwei": "2" + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Call counter contract with accesslist", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000", + "accessList": "[{\"address\":\"$contractAddress1\",\"storageKeys\":[\"0x0000000000000000000000000000000000000000000000000000000000000000\"]}]" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call counter contract call with accesslist", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000", + "isCall": true, + "accessList": "[{\"address\":\"$contractAddress1\",\"storageKeys\":[\"0x0000000000000000000000000000000000000000000000000000000000000000\"]}]" + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy storage contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#StorageContract.bytecode", + "abi": "#StorageContract.abi", + "args": [], + "gas": "900000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress2": "receipt.contractAddress" + } + }, + { + "description": "Call storage contract with legacy", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "store", + "abi": "#StorageContract.abi", + "args": [100], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call storage contract call with legacy", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "retrieve", + "abi": "#StorageContract.abi", + "args": [], + "gas": "300000", + "isCall": true + }, + "expect": { + "result.ret": { + "eq": "100" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call storage contract with dynamic fee", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "store", + "abi": "#StorageContract.abi", + "args": [200], + "gas": "300000", + "maxFeePerGasGwei": "100", + "maxPriorityFeePerGasGwei": "2" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call storage contract call with dyanmic fee", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "retrieve", + "abi": "#StorageContract.abi", + "args": [], + "gas": "300000", + "isCall": true, + "maxFeePerGasGwei": "100", + "maxPriorityFeePerGasGwei": "2" + }, + "expect": { + "result.ret": { + "eq": "300" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call storage contract with accesslist", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "store", + "abi": "#StorageContract.abi", + "args": [300], + "gas": "300000", + "accessList": "[{\"address\":\"$contractAddress1\",\"storageKeys\":[\"0x0000000000000000000000000000000000000000000000000000000000000000\"]}]" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call storage contract call with accesslist", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "retrieve", + "abi": "#StorageContract.abi", + "args": [], + "gas": "300000", + "isCall": true, + "accessList": "[{\"address\":\"$contractAddress1\",\"storageKeys\":[\"0x0000000000000000000000000000000000000000000000000000000000000000\"]}]" + }, + "expect": { + "result.ret": { + "eq": "600" + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/cross-contract-call-test.json b/packages/testcases/tests/testcases/cross-contract-call-test.json new file mode 100644 index 0000000..58cda89 --- /dev/null +++ b/packages/testcases/tests/testcases/cross-contract-call-test.json @@ -0,0 +1,272 @@ +{ + "description": "Test aspect intercept cross contract call", + "actions": [ + { + "description": "Create new account", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 1 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 1 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Caller Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CallerContract.bytecode", + "abi": "#CallerContract.abi", + "args": [] + }, + "output": { + "callerContract": "receipt.contractAddress" + } + }, + { + "description": "Deploy Counter Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "output": { + "counterContract": "receipt.contractAddress" + } + }, + { + "description": "Deploy Basic Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": [ + "PreContractCall", + "PostContractCall", + "PreTxExecute", + "PostTxExecute" + ], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "output": { + "basicAspect": "receipt.aspectAddress" + } + }, + { + "description": "Bind basic aspect with counter contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$basicAspect", + "account": "$counterContract", + "version": 1, + "priority": -1 + } + }, + { + "description": "Call counter contract through caller contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$callerContract", + "method": "call", + "abi": "#CallerContract.abi", + "args": ["$counterContract", "0xe8927fbc"] + } + }, + { + "description": "Deploy Pre-Contract Call revert Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": [ + "PreContractCall" + ], + "code": "#RevertAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "preContractCallRevertAspect": "receipt.aspectAddress" + } + }, + { + "description": "Bind pre contract call revert aspect with counter contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$preContractCallRevertAspect", + "account": "$counterContract", + "version": 1, + "priority": -2 + } + }, + { + "description": "Call counter contract through caller contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$callerContract", + "method": "call", + "abi": "#CallerContract.abi", + "args": ["$counterContract", "0xe8927fbc"] + }, + "expect": { + "error": { + "include": "preContractCall revert" + } + } + }, + { + "description": "Unbind pre contract call revert aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$preContractCallRevertAspect", + "account": "$counterContract" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Deploy Post-Contract Call revert Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": [ + "PostContractCall" + ], + "code": "#RevertAspect.bytecode" + }, + "gas": "auto" + }, + "output": { + "postContractCallRevertAspect": "receipt.aspectAddress" + } + }, + { + "description": "Bind post contract call revert aspect with counter contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$postContractCallRevertAspect", + "account": "$counterContract", + "version": 1, + "priority": -2 + } + }, + { + "description": "Call counter contract through caller contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$callerContract", + "method": "call", + "abi": "#CallerContract.abi", + "args": ["$counterContract", "0xe8927fbc"] + }, + "expect": { + "error": { + "include": "postContractCall revert" + } + } + }, + { + "description": "Unbind post contract call revert aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$postContractCallRevertAspect", + "account": "$counterContract" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Deploy Call Tree Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": [ + "PostContractCall" + ], + "code": "#CallTree.bytecode" + }, + "gas": "auto" + }, + "output": { + "callTreeAspect": "receipt.aspectAddress" + } + }, + { + "description": "Bind call tree aspect with counter contract", + "account": "", + "type": "bind", + "options": { + "aspect": "$callTreeAspect", + "account": "$counterContract", + "version": 1, + "priority": -2 + } + }, + { + "description": "Call counter contract through caller contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$callerContract", + "method": "call", + "abi": "#CallerContract.abi", + "args": ["$counterContract", "0xe8927fbc"] + } + } + ] +} diff --git a/packages/testcases/tests/testcases/honeypot-guard-by-count-test.json b/packages/testcases/tests/testcases/honeypot-guard-by-count-test.json new file mode 100644 index 0000000..a0a92e7 --- /dev/null +++ b/packages/testcases/tests/testcases/honeypot-guard-by-count-test.json @@ -0,0 +1,406 @@ +{ + "description": "Guard by count, honeyPot 1 is attacked and honeyPot 2 is protected by aspect", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 4 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 4 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy HoneyPot1 Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#HoneyPotContract.bytecode", + "abi": "#HoneyPotContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "honeyPotAddress1": "receipt.contractAddress" + } + }, + { + "description": "Call contract honeyPot1 deposit", + "account": "", + "type": "callContract", + "options": { + "contract": "$honeyPotAddress1", + "method": "deposit", + "abi": "#HoneyPotContract.abi", + "args": [], + "value": "0.1", + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot1 balance 0.1 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress1", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress1", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "100000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy Attack1 Contract", + "account": "$accounts.1", + "type": "deployContract", + "options": { + "code": "#AttackContract.bytecode", + "abi": "#AttackContract.abi", + "args": ["$honeyPotAddress1"], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "attackAddress1": "receipt.contractAddress" + } + }, + { + "description": "Call attack1 contract deposit", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$attackAddress1", + "method": "deposit", + "abi": "#AttackContract.abi", + "args": [], + "value": "0.1", + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot1 balance 0.2 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress1", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress1", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "200000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call attack1 contract attack", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$attackAddress1", + "method": "attack", + "abi": "#AttackContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Query honeyPot1 balance 0 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress1", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress1", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy HoneyPot2 Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#HoneyPotContract.bytecode", + "abi": "#HoneyPotContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "honeyPotAddress2": "receipt.contractAddress" + } + }, + { + "description": "Call contract honeyPot2 deposit", + "account": "", + "type": "callContract", + "options": { + "contract": "$honeyPotAddress2", + "method": "deposit", + "abi": "#HoneyPotContract.abi", + "args": [], + "value": "0.1", + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot2 balance 0.1 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress2", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress2", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "100000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy Attack2 Contract", + "account": "$accounts.3", + "type": "deployContract", + "options": { + "code": "#AttackContract.bytecode", + "abi": "#AttackContract.abi", + "args": ["$honeyPotAddress2"], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "attackAddress2": "receipt.contractAddress" + } + }, + { + "description": "Call attack2 contract deposit", + "account": "$accounts.3", + "type": "callContract", + "options": { + "contract": "$attackAddress2", + "method": "deposit", + "abi": "#AttackContract.abi", + "args": [], + "value": "0.1", + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot2 balance 0.2 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress2", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress2", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "200000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy Guard By Count Aspect", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.3" + }, + { + "key": "HoneyPotAddr", + "value": "$honeyPotAddress2" + }, + { + "key": "binding", + "value": "$honeyPotAddress2" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#GuardByCountAspect.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind honeyPot contract 2 with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$honeyPotAddress2", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call attack2 contract attack", + "account": "$accounts.3", + "type": "callContract", + "options": { + "contract": "$attackAddress2", + "method": "attack", + "abi": "#AttackContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "error": { + "include": "execution reverted" + } + } + }, + { + "description": "Query honeyPot2 balance 0.2 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress2", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress2", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "200000000000000000" + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/honeypot-guard-by-lock-test.json b/packages/testcases/tests/testcases/honeypot-guard-by-lock-test.json new file mode 100644 index 0000000..986a699 --- /dev/null +++ b/packages/testcases/tests/testcases/honeypot-guard-by-lock-test.json @@ -0,0 +1,406 @@ +{ + "description": "Guard by lock, honeyPot 1 is attacked and honeyPot 2 is protected by aspect", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 4 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 4 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy HoneyPot1 Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#HoneyPotContract.bytecode", + "abi": "#HoneyPotContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "honeyPotAddress1": "receipt.contractAddress" + } + }, + { + "description": "Call contract honeyPot1 deposit", + "account": "", + "type": "callContract", + "options": { + "contract": "$honeyPotAddress1", + "method": "deposit", + "abi": "#HoneyPotContract.abi", + "args": [], + "value": "0.1", + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot1 balance 0.1 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress1", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress1", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "100000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy Attack1 Contract", + "account": "$accounts.1", + "type": "deployContract", + "options": { + "code": "#AttackContract.bytecode", + "abi": "#AttackContract.abi", + "args": ["$honeyPotAddress1"], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "attackAddress1": "receipt.contractAddress" + } + }, + { + "description": "Call attack1 contract deposit", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$attackAddress1", + "method": "deposit", + "abi": "#AttackContract.abi", + "args": [], + "value": "0.1", + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot1 balance 0.2 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress1", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress1", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "200000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call attack1 contract attack", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$attackAddress1", + "method": "attack", + "abi": "#AttackContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Query honeyPot1 balance 0 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress1", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress1", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy HoneyPot2 Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#HoneyPotContract.bytecode", + "abi": "#HoneyPotContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "honeyPotAddress2": "receipt.contractAddress" + } + }, + { + "description": "Call contract honeyPot2 deposit", + "account": "", + "type": "callContract", + "options": { + "contract": "$honeyPotAddress2", + "method": "deposit", + "abi": "#HoneyPotContract.abi", + "args": [], + "value": "0.1", + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot2 balance 0.1 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress2", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress2", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "100000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy Attack2 Contract", + "account": "$accounts.3", + "type": "deployContract", + "options": { + "code": "#AttackContract.bytecode", + "abi": "#AttackContract.abi", + "args": ["$honeyPotAddress2"], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "attackAddress2": "receipt.contractAddress" + } + }, + { + "description": "Call attack2 contract deposit", + "account": "$accounts.3", + "type": "callContract", + "options": { + "contract": "$attackAddress2", + "method": "deposit", + "abi": "#AttackContract.abi", + "args": [], + "value": "0.1", + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Query honeyPot2 balance 0.2 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress2", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress2", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "200000000000000000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy Guard By Lock Aspect", + "account": "", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.3" + }, + { + "key": "HoneyPotAddr", + "value": "$honeyPotAddress2" + }, + { + "key": "binding", + "value": "$honeyPotAddress2" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#GuardByLockAspect.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind honeyPot contract 2 with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$honeyPotAddress2", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call attack2 contract attack", + "account": "$accounts.3", + "type": "callContract", + "options": { + "contract": "$attackAddress2", + "method": "attack", + "abi": "#AttackContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "error": { + "include": "execution reverted" + } + } + }, + { + "description": "Query honeyPot2 balance 0.2 art", + "account": "", + "type": "queryBasic", + "options": { + "contract": "$honeyPotAddress2", + "abi": "#HoneyPotContract.abi", + "args": [], + "queryAccount": "$honeyPotAddress2", + "gas": "300000", + "isCall": true + }, + "expect": { + "result.balance": { + "eq": "200000000000000000" + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/context-test.json b/packages/testcases/tests/testcases/hostapis/context-test.json new file mode 100644 index 0000000..8696b21 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/context-test.json @@ -0,0 +1,234 @@ +{ + "description": "Test HostApi Context", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract 1", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress1": "receipt.contractAddress" + } + }, + { + "description": "Deploy Contract 2", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress2": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect 1", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x03" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#HostApi.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId1": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Aspect 2", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x03" + } + ], + "joinPoints": ["PostContractCall"], + "code": "#HostApi.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId2": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract 1 with Aspect 1", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId1", + "account": "$contractAddress1", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Bind contract 2 with Aspect 2", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId2", + "account": "$contractAddress2", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract 2", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "error": { + "include": "aspect assert failed, expect 0xaaaa, got" + } + } + }, + { + "description": "Call operation set context", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId1", + "operationData": "0x0001100001", + "gas":"auto", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation get context", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId1", + "operationData": "0x0001100002", + "gas":"auto", + "args": [] + }, + "expect": { + "error": { + "include": "aspect assert failed, expect 0xaaaa, got" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-bigModExp-test.json b/packages/testcases/tests/testcases/hostapis/crypto-bigModExp-test.json new file mode 100644 index 0000000..b935473 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-bigModExp-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos bigModExp", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x02" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "10000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-blake2F-test.json b/packages/testcases/tests/testcases/hostapis/crypto-blake2F-test.json new file mode 100644 index 0000000..6c56c14 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-blake2F-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos bigModExp", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x06" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "10000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-bn256Add-test.json b/packages/testcases/tests/testcases/hostapis/crypto-bn256Add-test.json new file mode 100644 index 0000000..ab18b37 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-bn256Add-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos bn256Add", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x03" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "3000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-bn256Pairing-test.json b/packages/testcases/tests/testcases/hostapis/crypto-bn256Pairing-test.json new file mode 100644 index 0000000..3487e9e --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-bn256Pairing-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos bn256Pairing", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x02" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "10000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-bn256ScalarMul-test.json b/packages/testcases/tests/testcases/hostapis/crypto-bn256ScalarMul-test.json new file mode 100644 index 0000000..9a2e853 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-bn256ScalarMul-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos bn256ScalarMul", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x04" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "10000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-ecRecovery-test.json b/packages/testcases/tests/testcases/hostapis/crypto-ecRecovery-test.json new file mode 100644 index 0000000..4107708 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-ecRecovery-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos ecRecovery", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x01" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "300000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/crypto-others-test.json b/packages/testcases/tests/testcases/hostapis/crypto-others-test.json new file mode 100644 index 0000000..1e92c15 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/crypto-others-test.json @@ -0,0 +1,135 @@ +{ + "description": "Test Cryptos Sha256 Ripemd160 Keccak", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x07" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "1000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/property-test.json b/packages/testcases/tests/testcases/hostapis/property-test.json new file mode 100644 index 0000000..0879aac --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/property-test.json @@ -0,0 +1,309 @@ +{ + "description": "Test HostApi Property", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x01" + }, + { + "key": "number", + "value": "0x01" + }, + { + "key": "prop-key1", + "value": "0x1234567890abcdef" + }, + { + "key": "prop-key2", + "value": "0xabcdefabcdef" + }, + { + "key": "prop-key3", + "value": "0x68656c6c6f" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#HostApi.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas":"auto", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Upgrade HostApi Aspect to version 2", + "account": "$accounts.1", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#HostApi.bytecode", + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "properties": [ + { + "key": "prop-key2", + "value": "0x1234567890" + } + ] + }, + "aspect": "$aspectId", + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation with latest version", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas":"auto", + "args": [] + }, + "expect": { + "error": { + "include": "aspect assert failed, expect abcdefabcdef, got 1234567890", + "notinclude": "1234567890abcdef" + } + } + }, + { + "description": "Call operation with version 1(not supported)", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "version": 1, + "operationData": "0x0001100001", + "gas":"auto", + "args": [] + }, + "expect": { + "error": { + "include": "aspect assert failed, expect abcdefabcdef, got 1234567890", + "notinclude": "1234567890abcdef" + } + } + }, + { + "description": "Call contract with aspect version 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Change Aspect bind version to 2", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 2 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract with aspect version 2", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "error": { + "include": "aspect assert failed, expect abcdefabcdef, got 1234567890", + "notinclude": "1234567890abcdef" + } + } + }, + { + "description": "Unbind Contract from Aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Bind contract with Aspect version 1", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract with aspect version 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/state-test.json b/packages/testcases/tests/testcases/hostapis/state-test.json new file mode 100644 index 0000000..c64c66c --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/state-test.json @@ -0,0 +1,419 @@ +{ + "description": "Test HostApi State", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2, + "gas": "1000000" + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x02" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#HostApi.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "error": { + "include": "expect 0x123, got" + } + } + }, + { + "description": "Call contract Call", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000", + "isCall": true + }, + "expect": { + "error": { + "include": "expect 0x123, got" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas":"1000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation Call", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas":"1000000", + "args": [], + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract again", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Call contract again call", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000", + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Upgrade HostApi Aspect to version 2", + "account": "$accounts.1", + "type": "upgradeAspect", + "options": { + "args": { + "code": "#HostApi.bytecode", + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "properties": [ + { + "key": "prop-key2", + "value": "0x1234567890" + } + ] + }, + "aspect": "$aspectId", + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation with version 1", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "version": 1, + "gas":"1000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation with version 1 call", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "version": 1, + "gas":"1000000", + "args": [], + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation with version 2", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "version": 2, + "operationData": "0x0001100001", + "gas":"1000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation with version 2 call", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "version": 2, + "operationData": "0x0001100001", + "gas":"1000000", + "args": [], + "isCall": true + }, + "expect": { + "result.ret.length": { + "notEq": 0 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract with aspect version 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Change Aspect bind version to 2", + "account": "", + "type": "changeVersion", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 2, + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract with aspect version 2", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Unbind Contract from Aspect", + "account": "", + "type": "unbind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + } + } + }, + { + "description": "Bind contract with Aspect version 1", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract with aspect version 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/statedb-test.json b/packages/testcases/tests/testcases/hostapis/statedb-test.json new file mode 100644 index 0000000..4b1f072 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/statedb-test.json @@ -0,0 +1,199 @@ +{ + "description": "Test HostApi StateDB", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract 1", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress1": "receipt.contractAddress" + } + }, + { + "description": "Query Basic", + "account": "", + "type": "queryBasic", + "options": { + "queryAccount": "$accounts.1", + "queryContract": "contractAddress1", + "args": [] + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "nonce": "result.nonceFrom", + "balance": "result.balanceFrom", + "sender": "result.sender" + } + }, + { + "description": "Deploy Aspect 1", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x04" + }, + { + "key": "nonce", + "value": "$nonce" + }, + { + "key": "balance", + "value": "$balance" + }, + { + "key": "sender", + "value": "$sender" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall"], + "code": "#HostApi.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId1": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract 1 with Aspect 1", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId1", + "account": "$contractAddress1", + "version": 1, + "priority": -1 + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Send Call contract 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract 1", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Send Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId1", + "operationData": "0x0001100001", + "gas":"400000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId1", + "operationData": "0x0001100001", + "gas":"400000", + "args": [], + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/hostapis/static-call-test.json b/packages/testcases/tests/testcases/hostapis/static-call-test.json new file mode 100644 index 0000000..473e5d7 --- /dev/null +++ b/packages/testcases/tests/testcases/hostapis/static-call-test.json @@ -0,0 +1,202 @@ +{ + "description": "Test Aspect Staic Call", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Storage Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#StorageContract.bytecode", + "abi": "#StorageContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress1": "receipt.contractAddress" + } + }, + { + "description": "Deploy ScheduleTarget Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#ScheduleTargeContract.bytecode", + "abi": "#ScheduleTargeContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress2": "receipt.contractAddress" + } + }, + { + "description": "Call ScheduleTarget contract store", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "store", + "abi": "#ScheduleTargeContract.abi", + "args": [100], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call ScheduleTarget contract retrieve", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress2", + "method": "retrieve", + "abi": "#ScheduleTargeContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "ScheduleTargetCalldata": "tx.data" + } + }, + { + "description": "Deploy StaticCallAspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "from", + "value": "$accounts.1" + }, + { + "key": "to", + "value": "$contractAddress2" + }, + { + "key": "data", + "value": "$ScheduleTargetCalldata" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#StaticCallAspect.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Call StaticCallAspect operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x1167c2e50dFE34b9Ad593d2c6694731097147317", + "version": 1, + "gas":"20000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress1", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call storage contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress1", + "method": "store", + "abi": "#StorageContract.abi", + "args": [100], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/jit-gaming-test.json b/packages/testcases/tests/testcases/jit-gaming-test.json new file mode 100644 index 0000000..e879f8a --- /dev/null +++ b/packages/testcases/tests/testcases/jit-gaming-test.json @@ -0,0 +1,271 @@ +{ + "description": "Test Aspect JIT Gaming", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Factory Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#SimpleAccountFactoryContract.bytecode", + "abi": "#SimpleAccountFactoryContract.abi", + "args": ["0x000000000000000000000000000000000000AAEC"] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "factoryAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Royale Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#RoyaleContract.bytecode", + "abi": "#RoyaleContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "royaleAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy JIT Gaming Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PostContractCall"], + "code": "#JITGamingAspect.bytecode" + }, + "gas": "2000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind Royale Contract with Jit Gaming Apsect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$royaleAddress", + "version": 1, + "priority": 1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call factory contract and create AA", + "account": "", + "type": "callContract", + "options": { + "contract": "$factoryAddress", + "method": "createAccount", + "abi": "#SimpleAccountFactoryContract.abi", + "args": ["$accounts.0", 1], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call factory contract and get AA address", + "account": "", + "type": "callContract", + "options": { + "contract": "$factoryAddress", + "method": "getAddress", + "abi": "#SimpleAccountFactoryContract.abi", + "args": ["$accounts.0", 1], + "gas": "10000000", + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "walletAddr": "result.ret" + } + }, + { + "description": "Tansfer Token to AA address", + "account": "", + "type": "transfer", + "options": { + "to": "$walletAddr", + "amount": "1" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "AA wallet Approve Aspect", + "account": "$accounts.0", + "type": "callContract", + "options": { + "contract": "$walletAddr", + "method": "approveAspects", + "abi": "#SimpleAccountContract.abi", + "args": [["$aspectId"]], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Register Sys Player", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001$walletAddr", + "version": 1, + "gas":"2000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Register Sys Player", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x1001", + "version": 1, + "gas":"2000000", + "args": [], + "isCall": true + }, + "expect": { + "result.ret": { + "notEq": "" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call Royale Contract Move", + "account": "", + "type": "callContract", + "options": { + "contract": "$royaleAddress", + "method": "move", + "abi": "#RoyaleContract.abi", + "args": [1, 2], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call Royale Contract Get Status", + "account": "", + "type": "callContract", + "options": { + "contract": "$royaleAddress", + "method": "getGameStatus", + "abi": "#RoyaleContract.abi", + "args": [], + "gas": "1000000", + "isCall": true + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.board.length": { + "eq": 100 + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/joinpoints-test.json b/packages/testcases/tests/testcases/joinpoints-test.json new file mode 100644 index 0000000..0210e95 --- /dev/null +++ b/packages/testcases/tests/testcases/joinpoints-test.json @@ -0,0 +1,166 @@ +{ + "description": "Test Aspect JointPoints", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Contract 1", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Aspect 1", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#JoinPoints.bytecode" + }, + "gas": "8000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "13000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract call", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "13000000", + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "3000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation call", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas": "3000000", + "args": [], + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-debug-1-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-debug-1-test.json new file mode 100644 index 0000000..d147e0d --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-debug-1-test.json @@ -0,0 +1,424 @@ +{ + "description": "Test JsonRPC namesapece debug 1", + "actions": [ + { + "description": "debug_getRawHeader 1", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawHeader", + "params": ["0x1"] + }, + "expect": { + "result.ret.length": { + "gt": 100 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_getRawHeader latest", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawHeader", + "params": ["latest"] + }, + "expect": { + "result.ret.length": { + "gt": 100 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_getRawBlock 1", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawBlock", + "params": ["0x1"] + }, + "expect": { + "result.ret.length": { + "gt": 100 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_getRawBlock latest", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawBlock", + "params": ["latest"] + }, + "expect": { + "result.ret.length": { + "gt": 100 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy event contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#EventContract.bytecode", + "abi": "#EventContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "eventAddress": "receipt.contractAddress", + "deployEvent_blockHash": "receipt.blockHash", + "deployEvent_txhash": "receipt.transactionHash" + } + }, + { + "description": "Call event contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$eventAddress", + "method": "sendEvent", + "abi": "#EventContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "callEvent_blockHash": "receipt.blockHash", + "callEvent_txhash": "receipt.transactionHash" + } + }, + { + "description": "debug_getReceipts deploy contract tx", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getReceipts", + "params": ["$deployEvent_blockHash"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "result.ret.0.transactionHash": { + "eq": "$deployEvent_txhash" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_getReceipts call contract tx", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getReceipts", + "params": ["$callEvent_blockHash"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "result.ret.0.transactionHash": { + "eq": "$callEvent_txhash" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_getRawReceipts deploy contract tx", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawReceipts", + "params": ["$deployEvent_blockHash"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "result.ret.0.length": { + "gt": 100 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_getRawReceipts call contract tx", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawReceipts", + "params": ["$callEvent_blockHash"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "result.ret.0.length": { + "gt": 100 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getRawTransactionByHash", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getRawTransactionByHash", + "params": ["$deployEvent_txhash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 100 + } + }, + "output": { + "eth_rawTx": "result.ret" + } + }, + { + "description": "debug_getRawTransaction", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getRawTransaction", + "params": ["$deployEvent_txhash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "$eth_rawTx" + } + } + }, + { + "description": "debug_printBlock", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_printBlock", + "params": [1] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 100 + } + } + }, + { + "description": "debug_chaindbProperty", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_chaindbProperty", + "params": ["stats"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 10 + } + } + }, + { + "description": "debug_chaindbCompact", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_chaindbCompact", + "params": [] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "debug_gcStats", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_gcStats", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.LastGC": { + "notEq": "" + } + } + }, + { + "description": "debug_memStats", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_memStats", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.Alloc": { + "gt": 10000 + } + } + }, + { + "description": "debug_setBlockProfileRate", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_setBlockProfileRate", + "params": [1000] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "debug_stacks", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_stacks", + "params": [] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "debug_freeOSMemory", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_freeOSMemory", + "params": [] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "debug_setGCPercent", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_setGCPercent", + "params": [150] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "debug_setGCPercent second time", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_setGCPercent", + "params": [150] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": 150 + } + } + }, + { + "description": "debug_getHeaderRlp", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getHeaderRlp", + "params": [1] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 100 + } + } + }, + { + "description": "debug_getBlockRlp", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_getBlockRlp", + "params": [1] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 100 + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-debug-2-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-debug-2-test.json new file mode 100644 index 0000000..ee96552 --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-debug-2-test.json @@ -0,0 +1,337 @@ +{ + "description": "Test JsonRPC namesapece debug 2", + "actions": [ + { + "description": "Deploy counter contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress", + "deploy_blockNumber": "receipt.blockNumber", + "deploy_blockHash": "receipt.blockHash", + "deploy_txHash": "receipt.transactionHash" + } + }, + { + "description": "debug_traceTransaction, deploy contract + structLogger", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceTransaction", + "params": ["$deploy_txHash", "{\"tracer\": \"\"}"] + }, + "expect": { + "result.ret.failed": { + "eq": false + }, + "result.ret.structLogs.length": { + "gt": 0 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceTransaction, deploy contract + callTracer", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceTransaction", + "params": ["$deploy_txHash", "{\"tracer\": \"callTracer\"}"] + }, + "expect": { + "result.ret.type": { + "eq": "CREATE" + }, + "result.ret.input.length": { + "gt": 10 + }, + "result.ret.output.length": { + "gt": 10 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceBlockByNumber, deploy contract + structLogger", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceBlockByNumber", + "params": ["numberToHex($deploy_blockNumber)", "{\"tracer\": \"\"}"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceBlockByNumber, deploy contract + callTracer", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceBlockByNumber", + "params": ["numberToHex($deploy_blockNumber)", "{\"tracer\": \"callTracer\"}"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceBlockByHash, deploy contract + structLogger", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceBlockByHash", + "params": ["$deploy_blockHash", "{\"tracer\": \"\"}"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceBlockByHash, deploy contract + callTracer", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceBlockByHash", + "params": ["$deploy_blockHash", "{\"tracer\": \"callTracer\"}"] + }, + "expect": { + "result.ret.length": { + "eq": 1 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call counter contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "call_blockNumber": "receipt.blockNumber", + "call_blockHash": "receipt.blockHash", + "call_txHash": "receipt.transactionHash" + } + }, + { + "description": "debug_traceTransaction, call contract + structLogger", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceTransaction", + "params": ["$call_txHash", "{\"tracer\": \"\"}"] + }, + "expect": { + "result.ret.failed": { + "eq": false + }, + "result.ret.structLogs.length": { + "gt": 0 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceTransaction, call contract + callTracer", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceTransaction", + "params": ["$call_txHash", "{\"tracer\": \"callTracer\"}"] + }, + "expect": { + "result.ret.type": { + "eq": "CALL" + }, + "result.ret.input.length": { + "eq": 10 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Create new account", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + }, + { + "key": "test", + "value": "0x03" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute", "VerifyTx"], + "code": "#HostApiCrypto.bytecode" + }, + "gas": "5000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call contract with aspect", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "3000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "callWithAspect_txHash": "receipt.transactionHash" + } + }, + { + "description": "debug_traceTransaction, call contract-aspect + structLogger", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceTransaction", + "params": ["$callWithAspect_txHash", "{\"tracer\": \"\"}"] + }, + "expect": { + "result.ret.failed": { + "eq": false + }, + "result.ret.structLogs.length": { + "gt": 0 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "debug_traceTransaction, call contract-aspect + callTracer", + "account": "", + "type": "jsonRPC", + "options": { + "method": "debug_traceTransaction", + "params": ["$callWithAspect_txHash", "{\"tracer\": \"callTracer\"}"] + }, + "expect": { + "result.ret.type": { + "eq": "CALL" + }, + "result.ret.input.length": { + "eq": 10 + }, + "error": { + "eq": "" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-eth-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-eth-test.json new file mode 100644 index 0000000..e78eedb --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-eth-test.json @@ -0,0 +1,1199 @@ +{ + "description": "Test JsonRPC namesapece eth", + "actions": [ + { + "description": "eth_chainId", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_chainId" + }, + "expect": { + "result.ret": { + "notEq": "0x0" + }, + "error": { + "eq": "" + } + }, + "output": { + "chainId": "result.ret" + } + }, + { + "description": "eth_coinbase", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_coinbase" + }, + "expect": { + "result.ret.length": { + "eq": 42 + }, + "result.ret": { + "include": "0x" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_blockNumber", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_blockNumber" + }, + "expect": { + "result.ret": { + "include": "0x" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Create new account", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 2, + "accountNumber": 3 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 3 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "eth_getBalance by account with balance", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBalance", + "params": ["$accounts.0", "latest"] + }, + "expect": { + "result.ret": { + "eq": "0x1bc16d674ec80000" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getBalance by account without balance", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBalance", + "params": ["0xB3AC868dB93165C2C9A5A9005A98A0bf120B22Ad", "latest"] + }, + "expect": { + "result.ret": { + "eq": "0x0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getBalance by empty account", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBalance", + "params": ["0x0000000000000000000000000000000000000000", "latest"] + }, + "expect": { + "result.ret": { + "eq": "0x0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getBalance by invalid account", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBalance", + "params": ["0x3AC868dB93165C2C9A5A9005A98A0bf120B22Ad", "latest"] + }, + "expect": { + "error": { + "notEq": "" + } + } + }, + { + "description": "Deploy counter contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#CounterContract.bytecode", + "abi": "#CounterContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Call counter contract", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "callCounter_blockNumber": "receipt.blockNumber", + "callCounter_blockHash": "receipt.blockHash", + "callContract_txHash": "receipt.transactionHash", + "callCounter_txIndex": "receipt.transactionIndex" + } + }, + { + "description": "eth_getProof", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getProof", + "params": ["$contractAddress",["0x0"],"latest"] + }, + "expect": { + "result.ret": { + "include": { + "address": "$contractAddress", + "accountProof.length": 2, + "nonce": 1, + "storageHash": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + }, + "result.ret.accountProof.length": { + "eq": 2 + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getProof by invalid contract", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getProof", + "params": ["0xB3AC868dB9316d",["0x0"],"latest"] + }, + "expect": { + "error": { + "notEq": "" + } + } + }, + { + "description": "eth_getProof by future block", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getProof", + "params": ["$contractAddress",["0x0"],"0x10000000000000"] + }, + "expect": { + "error": { + "notEq": "" + } + } + }, + { + "description": "eth_getHeaderByNumber", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getHeaderByNumber", + "params": ["0x5"] + }, + "expect": { + "result.ret.number": { + "eq": "0x5" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getHeaderByNumber latest", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getHeaderByNumber", + "params": ["latest"] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getHeaderByNumber earliest", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getHeaderByNumber", + "params": ["earliest"] + }, + "expect": { + "result.ret.number": { + "eq": "0x1" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "eth_getHeaderByNumber invalid block", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getHeaderByNumber", + "params": ["0x123456789"] + }, + "expect": { + "error": { + "notEq": "" + } + } + }, + { + "description": "eth_getHeaderByHash", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getHeaderByHash", + "params": ["$callCounter_blockHash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.hash": { + "eq": "$callCounter_blockHash" + } + } + }, + { + "description": "eth_getBlockByNumber", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBlockByNumber", + "params": ["latest", false] + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "getBlockByNumber_number": "result.ret.number", + "getBlockByNumber_hash": "result.ret.hash" + } + }, + { + "description": "eth_getBlockByNumber", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBlockByNumber", + "params": ["$getBlockByNumber_number", true] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.hash": { + "eq": "$getBlockByNumber_hash" + } + } + }, + { + "description": "eth_getBlockByHash", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBlockByHash", + "params": ["$callCounter_blockHash", true] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.hash": { + "eq": "$callCounter_blockHash" + }, + "result.ret.transactions.length": { + "gt": 0 + } + } + }, + { + "description": "eth_getCode", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getCode", + "params": ["$contractAddress", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 1598 + } + } + }, + { + "description": "eth_getCode with empty address", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getCode", + "params": ["0x0000000000000000000000000000000000000000", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x" + } + } + }, + { + "description": "eth_getStorageAt slot 0", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getStorageAt", + "params": ["$contractAddress", "0x0", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 66 + }, + "result.ret": { + "notEq": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + } + }, + { + "description": "eth_getStorageAt slot 1", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getStorageAt", + "params": ["$contractAddress", "0x1", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + } + }, + { + "description": "personal_newAccount", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_newAccount", + "params": ["testtest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 42 + } + }, + "output": { + "newAccount_address": "result.ret" + } + }, + { + "description": "eth_accounts", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_accounts", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 0 + } + } + }, + { + "description": "eth_protocolVersion", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_protocolVersion", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x44" + } + } + }, + { + "description": "eth_gasPrice", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_gasPrice", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "notEq": "0x0" + } + } + }, + { + "description": "eth_maxPriorityFeePerGas", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_maxPriorityFeePerGas", + "params": [] + }, + "expect": { + "error": { + "eq": "" + } + } + }, + { + "description": "eth_feeHistory", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_feeHistory", + "params": [8, "latest", [ 25,75 ]] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.reward.length": { + "eq": 8 + }, + "result.ret.baseFeePerGas.length": { + "eq": 9 + } + } + }, + { + "description": "eth_syncing", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_syncing", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": false + } + } + }, + { + "description": "eth_getBlockTransactionCountByNumber not zero", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBlockTransactionCountByNumber", + "params": ["numberToHex($callCounter_blockNumber)"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "notEq": "0x0" + } + } + }, + { + "description": "eth_getBlockTransactionCountByNumber zero", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBlockTransactionCountByNumber", + "params": ["0x1"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x0" + } + } + }, + { + "description": "eth_getBlockTransactionCountByHash not zero", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBlockTransactionCountByHash", + "params": ["$callCounter_blockHash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "notEq": "0x0" + } + } + }, + { + "description": "eth_getTransactionByBlockNumberAndIndex", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionByBlockNumberAndIndex", + "params": ["numberToHex($callCounter_blockNumber)", "0x0"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.blockHash": { + "eq": "$callCounter_blockHash" + }, + "result.ret.transactionIndex": { + "eq": "0x0" + } + } + }, + { + "description": "eth_getTransactionByBlockNumberAndIndex not exist", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionByBlockNumberAndIndex", + "params": ["numberToHex($callCounter_blockNumber)", "0x100"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": null + } + } + }, + { + "description": "eth_getTransactionByBlockHashAndIndex", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionByBlockHashAndIndex", + "params": ["$callCounter_blockHash", "numberToHex($callCounter_txIndex)"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.blockHash": { + "eq": "$callCounter_blockHash" + }, + "result.ret.hash": { + "eq": "$callContract_txHash" + } + } + }, + { + "description": "eth_getTransactionByBlockHashAndIndex not exist", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionByBlockHashAndIndex", + "params": ["$callCounter_blockHash", "0x100"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": null + } + } + }, + { + "description": "eth_getRawTransactionByBlockNumberAndIndex", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getRawTransactionByBlockNumberAndIndex", + "params": ["numberToHex($callCounter_blockNumber)", "numberToHex($callCounter_txIndex)"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 100 + } + }, + "output": { + "getRawTransactionByBlockHashAndIndex_RawTx": "result.ret" + } + }, + { + "description": "eth_getRawTransactionByBlockHashAndIndex", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getRawTransactionByBlockHashAndIndex", + "params": ["$callCounter_blockHash", "0x0"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 100 + }, + "result.ret": { + "eq": "$getRawTransactionByBlockHashAndIndex_RawTx" + } + } + }, + { + "description": "eth_getTransactionCount block 0", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionCount", + "params": ["$accounts.0", "0x0"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x0" + } + } + }, + { + "description": "eth_getTransactionCount before accounts.1 call", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionCount", + "params": ["$accounts.1", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x0" + } + } + }, + { + "description": "Call contract by accounts.1", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "increase", + "abi": "#CounterContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "counterCountract_hash": "receipt.transactionHash" + } + }, + { + "description": "eth_getTransactionCount after accounts.1 call", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionCount", + "params": ["$accounts.1", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x1" + } + } + }, + { + "description": "eth_getTransactionCount empty account", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionCount", + "params": ["0x0000000000000000000000000000000000000000", "latest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x0" + } + } + }, + { + "description": "eth_getTransactionByHash", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionByHash", + "params": ["$counterCountract_hash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.hash": { + "eq": "$counterCountract_hash" + } + } + }, + { + "description": "eth_getTransactionByHash not exist", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionByHash", + "params": ["0x16079215344f1f43b087b23222acbb6b4149ce5e0975dacea2938a76f7b480ac"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": null + } + } + }, + { + "description": "eth_getRawTransactionByHash", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getRawTransactionByHash", + "params": ["$callContract_txHash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "$getRawTransactionByBlockHashAndIndex_RawTx" + } + } + }, + { + "description": "eth_getRawTransactionByHash not exist", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getRawTransactionByHash", + "params": ["0x16079215344f1f43b087b23222acbb6b4149ce5e0975dacea2938a76f7b480ac"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x" + } + } + }, + { + "description": "eth_getTransactionReceipt", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionReceipt", + "params": ["$callContract_txHash"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.blockHash": { + "eq": "$callCounter_blockHash" + }, + "result.ret.transactionHash": { + "eq": "$callContract_txHash" + } + } + }, + { + "description": "eth_getTransactionReceipt not exist", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionReceipt", + "params": ["0x16079215344f1f43b087b23222acbb6b4149ce5e0975dacea2938a76f7b480ac"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": null + } + } + }, + { + "description": "Deploy event contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#EventContract.bytecode", + "abi": "#EventContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "eventAddress": "receipt.contractAddress" + } + }, + { + "description": "Tansfer Token to the new account saved in current node", + "account": "", + "type": "transfer", + "options": { + "to": "$newAccount_address", + "amount": "1" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call event contract", + "account": "$accounts.2", + "type": "callContract", + "options": { + "contract": "$eventAddress", + "method": "sendEvent", + "abi": "#EventContract.abi", + "args": [], + "gas": "1000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "callEvent_blockHash": "receipt.blockHash", + "callEvent_topics0": "receipt.logs.0.topics.0", + "callEvent_topics": "receipt.logs.0.topics" + } + }, + { + "description": "eth_getLogs", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getLogs", + "params": ["{\"blockHash\":\"$callEvent_blockHash\",\"topics\":[\"$callEvent_topics0\"]}"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 2 + }, + "result.ret.0.topics": { + "eq": "$callEvent_topics" + } + } + }, + { + "description": "eth_sign with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_sign", + "params": ["$newAccount_address", "0x68656c6c6f"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 0 + } + } + }, + { + "description": "eth_signTransaction with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_signTransaction", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"gas\":\"0x30d40\",\"data\":\"0x32b7a761\",\"gasPrice\":\"0x100\",\"nonce\":\"0x0\"}"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.raw.length": { + "gt": 100 + }, + "result.ret.tx.v.length": { + "gt": 2 + }, + "result.ret.tx.r.length": { + "gt": 2 + }, + "result.ret.tx.s.length": { + "gt": 2 + } + }, + "output": { + "signTransaction_raw": "result.ret.raw" + } + }, + { + "description": "eth_sendRawTransaction send the raw tx signed in last step", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_sendRawTransaction", + "params": ["$signTransaction_raw"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 66 + } + }, + "output": { + "sendRawTransaction_txHash": "result.ret" + } + }, + { + "description": "verify the sendRawTransaction success", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionReceipt", + "params": ["$sendRawTransaction_txHash"], + "wait": 3000 + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.status": { + "eq": "0x1" + }, + "result.ret.transactionHash": { + "eq": "$sendRawTransaction_txHash" + } + } + }, + { + "description": "eth_sendTransaction with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_sendTransaction", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"gas\":\"0x2b0b6\",\"data\":\"0x32b7a761\",\"gasPrice\":\"0x100\",\"nonce\":\"0x1\"}"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 0 + } + }, + "output": { + "sendTransaction_txHash": "result.ret" + } + }, + { + "description": "verify the sendTransaction success", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionReceipt", + "params": ["$sendTransaction_txHash"], + "wait": 3000 + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.status": { + "eq": "0x1" + }, + "result.ret.transactionHash": { + "eq": "$sendTransaction_txHash" + } + } + }, + { + "description": "eth_fillTransaction", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_fillTransaction", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"data\":\"0x32b7a761\"}"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.tx.chainId": { + "eq": "$chainId" + }, + "result.ret.tx.nonce": { + "eq": "0x2" + }, + "result.ret.tx.gas": { + "eq": "0x2b0b6" + } + } + }, + { + "description": "test send a transaction and resend, send", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_sendTransaction", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"gas\":\"0x2b0b6\",\"data\":\"0x32b7a761\",\"gasPrice\":\"0x100\",\"nonce\":\"0x2\"}"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 0 + } + }, + "output": { + "resend_txHash1": "result.ret" + } + }, + { + "description": "test send a transaction and resend, resend", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_resend", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"gas\":\"0x3b0b6\",\"data\":\"0x32b7a761\",\"gasPrice\":\"0x105\",\"nonce\":\"0x2\"}"] + }, + "expect": { + "error": { + "notEq": "" + } + }, + "output": { + "resend_txHash2": "result.ret" + } + } + ] +} diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-net-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-net-test.json new file mode 100644 index 0000000..0a6fd02 --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-net-test.json @@ -0,0 +1,55 @@ +{ + "description": "Test JsonRPC namesapece net", + "actions": [ + { + "description": "net_listening", + "account": "", + "type": "jsonRPC", + "options": { + "method": "net_listening" + }, + "expect": { + "result.ret": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "net_peerCount", + "account": "", + "type": "jsonRPC", + "options": { + "method": "net_peerCount", + "params": [] + }, + "expect": { + "result.ret": { + "include": "0x" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "net_version", + "account": "", + "type": "jsonRPC", + "options": { + "method": "net_version", + "params": [] + }, + "expect": { + "result.ret": { + "include": "118" + }, + "error": { + "eq": "" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-personal-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-personal-test.json new file mode 100644 index 0000000..71daacb --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-personal-test.json @@ -0,0 +1,243 @@ +{ + "description": "Test JsonRPC namesapece personal", + "actions": [ + { + "description": "personal_newAccount", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_newAccount", + "params": ["testtest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 42 + } + }, + "output": { + "newAccount_address": "result.ret" + } + }, + { + "description": "personal_listAccounts", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_listAccounts", + "params": [] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 0 + } + } + }, + { + "description": "personal_importRawKey", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_importRawKey", + "params": ["faf950a1d495d838b43d8281be3dd37950614577c00dde779d49e806e0f5c0a4", "testtest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0xacf180ac2d3663dc71a3a694e62712d7d4f4004c" + } + }, + "output": { + "imported_account": "result.ret" + } + }, + { + "description": "Tansfer Token to the new account saved in current node", + "account": "", + "type": "transfer", + "options": { + "to": "$newAccount_address", + "amount": "1" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy event contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#EventContract.bytecode", + "abi": "#EventContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "eventAddress": "receipt.contractAddress" + } + }, + { + "description": "personal_sendTransaction with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_sendTransaction", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"gas\":\"0x2b0b6\",\"data\":\"0x32b7a761\",\"gasPrice\":\"0x100\",\"nonce\":\"0x0\"}", "testtest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 0 + } + }, + "output": { + "sendTransaction_txHash": "result.ret" + } + }, + { + "description": "verify the sendTransaction success", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionReceipt", + "params": ["$sendTransaction_txHash"], + "wait": 3000 + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.status": { + "eq": "0x1" + }, + "result.ret.transactionHash": { + "eq": "$sendTransaction_txHash" + } + } + }, + { + "description": "personal_sign with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_sign", + "params": ["0x68656c6c6f", "$newAccount_address", "testtest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "gt": 2 + } + } + }, + { + "description": "personal_signTransaction with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_signTransaction", + "params": ["{\"from\":\"$newAccount_address\",\"to\":\"$eventAddress\",\"gas\":\"0x30d40\",\"data\":\"0x32b7a761\",\"gasPrice\":\"0x100\",\"nonce\":\"0x1\"}", "testtest"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.raw.length": { + "gt": 100 + }, + "result.ret.tx.v.length": { + "gt": 2 + }, + "result.ret.tx.r.length": { + "gt": 2 + }, + "result.ret.tx.s.length": { + "gt": 2 + } + }, + "output": { + "signTransaction_raw": "result.ret.raw" + } + }, + { + "description": "eth_sendRawTransaction send the raw tx signed in last step", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_sendRawTransaction", + "params": ["$signTransaction_raw"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.length": { + "eq": 66 + } + }, + "output": { + "sendRawTransaction_txHash": "result.ret" + } + }, + { + "description": "verify the sendRawTransaction success", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getTransactionReceipt", + "params": ["$sendRawTransaction_txHash"], + "wait": 3000 + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret.status": { + "eq": "0x1" + }, + "result.ret.transactionHash": { + "eq": "$sendRawTransaction_txHash" + } + } + }, + { + "description": "personal_ecRecover with account save on current node", + "account": "", + "type": "jsonRPC", + "options": { + "method": "personal_ecRecover", + "params": ["0xaabbccdd", "0x5b6693f153b48ec1c706ba4169960386dbaa6903e249cc79a8e6ddc434451d417e1e57327872c7f538beeb323c300afa9999a3d4a5de6caf3be0d5ef832b67ef1c"] + }, + "expect": { + "error": { + "eq": "" + }, + "result.ret": { + "eq": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-txpool-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-txpool-test.json new file mode 100644 index 0000000..d0bfb61 --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-txpool-test.json @@ -0,0 +1,72 @@ +{ + "description": "Test JsonRPC namesapece txpool(need a pressure on node)", + "actions": [ + { + "description": "txpool_content", + "account": "", + "type": "jsonRPC", + "options": { + "method": "txpool_content" + }, + "expect": { + "result.ret": { + "notEq": "0x0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "txpool_contentFrom", + "account": "", + "type": "jsonRPC", + "options": { + "method": "txpool_contentFrom", + "params": ["0xddfD220fC481E897BDFB30d285aa58417684a251"] + }, + "expect": { + "result.ret": { + "notEq": "0x0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "txpool_status", + "account": "", + "type": "jsonRPC", + "options": { + "method": "txpool_status", + "params": [] + }, + "expect": { + "result.ret": { + "notEq": "0x0" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "txpool_inspect", + "account": "", + "type": "jsonRPC", + "options": { + "method": "txpool_inspect", + "params": [] + }, + "expect": { + "result.ret": { + "notEq": "0x0" + }, + "error": { + "eq": "" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/json-rpc/json-rpc-web3-test.json b/packages/testcases/tests/testcases/json-rpc/json-rpc-web3-test.json new file mode 100644 index 0000000..c12304f --- /dev/null +++ b/packages/testcases/tests/testcases/json-rpc/json-rpc-web3-test.json @@ -0,0 +1,38 @@ +{ + "description": "Test JsonRPC namesapece web3", + "actions": [ + { + "description": "web3_clientVersion", + "account": "", + "type": "jsonRPC", + "options": { + "method": "web3_clientVersion" + }, + "expect": { + "result.ret": { + "include": "artela" + }, + "error": { + "eq": "" + } + } + }, + { + "description": "web3_sha3", + "account": "", + "type": "jsonRPC", + "options": { + "method": "web3_sha3", + "params": ["0x48656c6c6f2c20776f726c6421"] + }, + "expect": { + "result.ret": { + "eq": "0xb6e16d27ac5ab427a7f68900ac5559ce272dc6c37c82b3e052246c82244c50e4" + }, + "error": { + "eq": "" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/operation-cases/base-operation-test.json b/packages/testcases/tests/testcases/operation-cases/base-operation-test.json new file mode 100644 index 0000000..be112fd --- /dev/null +++ b/packages/testcases/tests/testcases/operation-cases/base-operation-test.json @@ -0,0 +1,123 @@ +{ + "description": "Test Operation Basic", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Basic Operation Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "code": "#OperationBasic.bytecode" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Call operation success with 0001", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001100001", + "gas":"auto", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation success with 1003", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x1003101003", + "gas":"auto", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call operation fail with wrong params", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x1003101004", + "gas":"auto", + "args": [] + }, + "expect": { + "error": { + "include": "unknown params" + } + } + }, + { + "description": "Call operation fail with error unknow op", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0100100001", + "gas":"auto", + "args": [] + }, + "expect": { + "error": { + "include": "unknown op" + } + } + } + ] +} diff --git a/packages/testcases/tests/testcases/session-key-test.json b/packages/testcases/tests/testcases/session-key-test.json new file mode 100644 index 0000000..24b67d1 --- /dev/null +++ b/packages/testcases/tests/testcases/session-key-test.json @@ -0,0 +1,307 @@ +{ + "description": "Test SessionKey", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 2, + "accountNumber": 3 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 3 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Session Key Contract", + "account": "$accounts.0", + "type": "deployContract", + "options": { + "code": "#SessionKeyContract.bytecode", + "abi": "#SessionKeyContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy Session Key Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["VerifyTx"], + "code": "#SessionKeyAspect.bytecode", + "paymaster": "$accounts.0", + "proof": "0x0" + }, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": 1, + "gas": "auto" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Bind EOA with Aspect", + "account": "$accounts.0", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$accounts.0", + "version": 1, + "priority": 1, + "gas": "auto", + "isEOA": true + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Get create session key call data", + "account": "$accounts.0", + "type": "getSessionKeyCallData", + "options": { + "contract": "$contractAddress", + "abi": "#SessionKeyContract.abi", + "method": "add", + "args": [[1]], + "sKeyAddress": "$accounts.1", + "aspectID": "$aspectId", + "operation": "reg" + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "sessionKeyRegData": "result.sessionKeyRegData" + } + }, + { + "description": "Call operation", + "account": "$accounts.0", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "callData": "$sessionKeyRegData", + "gas": "3000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call contract by main key", + "account": "$accounts.0", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "add", + "abi": "#SessionKeyContract.abi", + "args": [[1]], + "gas": "1300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Get Tx of call contract by seesion key", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "add", + "abi": "#SessionKeyContract.abi", + "args": [[1]], + "gas": "1300000", + "nonce": "6", + "notSend": true + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "signedTx": "result.signedTx" + } + }, + { + "description": "Get session key call data", + "account": "$accounts.0", + "type": "getSessionKeyCallData", + "options": { + "contract": "$contractAddress", + "abi": "#SessionKeyContract.abi", + "method": "add", + "args": [[1]], + "sKeyAddress": "$accounts.1", + "aspectID": "$aspectId", + "signedTx": "$signedTx", + "operation": "call" + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "callData": "result.callData" + } + }, + { + "description": "Call contract by session key", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "add", + "abi": "#SessionKeyContract.abi", + "args": [[1]], + "data": "$callData", + "gas": "1300000", + "notSign": true, + "nonce": "6" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Get Tx of call contract by seesion key 2", + "account": "$accounts.2", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "add", + "abi": "#SessionKeyContract.abi", + "args": [[1]], + "gas": "1300000", + "nonce": "1", + "notSend": true + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "signedTx": "result.signedTx" + } + }, + { + "description": "Get session key 2 call data", + "account": "$accounts.0", + "type": "getSessionKeyCallData", + "options": { + "contract": "$contractAddress", + "abi": "#SessionKeyContract.abi", + "method": "add", + "args": [[1]], + "sKeyAddress": "$accounts.2", + "aspectID": "$aspectId", + "signedTx": "$signedTx", + "operation": "call" + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "callData": "result.callData" + } + }, + { + "description": "Call contract by session key 2", + "account": "$accounts.1", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "add", + "abi": "#SessionKeyContract.abi", + "args": [[1]], + "data": "$callData", + "gas": "1300000", + "notSign": true, + "nonce": "1" + }, + "expect": { + "error": { + "notEq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/sources.json b/packages/testcases/tests/testcases/sources.json new file mode 100644 index 0000000..84d9cd9 --- /dev/null +++ b/packages/testcases/tests/testcases/sources.json @@ -0,0 +1,487 @@ +[ + { + "name": "BasicAspectCompressed", + "description": "Compressed dummy Aspect for testing basic functionalities", + "type": "aspect", + "src": "basic.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "BasicAspectNoCompression", + "description": "Uncompressed dummy Aspect for testing basic functionalities", + "type": "aspect", + "src": "basic.ts", + "compileOptions": { + "compress": false, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "VerifierAspect", + "description": "Verifier Aspect for testing customized tx verification", + "type": "aspect", + "src": "verifier.ts", + "compileOptions": { + "compress": true + } + }, + { + "name": "BasicAspectBulkMemoryEnabled", + "description": "Dummy Aspect with bulk memory enabled", + "type": "aspect", + "src": "basic.ts", + "compileOptions": { + "compress": true, + "args": [ + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "BasicAspectWithGC", + "description": "Dummy Aspect with gc enabled", + "type": "aspect", + "src": "basic.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "incremental", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "BasicAspectNoExportStart", + "description": "Dummy Aspect without exporting start function", + "type": "aspect", + "src": "basic.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "FloatAspect", + "description": "Float Aspect for testing code validations", + "type": "aspect", + "src": "float.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O0", + "--debug" + ] + } + }, + { + "name": "InitFailAspect", + "description": "Aspect with init failure", + "type": "aspect", + "src": "init-fail.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O0", + "--debug" + ] + } + }, + { + "name": "RevertAspect", + "description": "Aspect with call revert", + "type": "aspect", + "src": "revert-aspect.ts", + "compileOptions": { + "compress": true + } + }, + { + "name": "CallTree", + "description": "Aspect with call tree query", + "type": "aspect", + "src": "call-tree-aspect.ts", + "compileOptions": { + "compress": true + } + }, + { + "name": "CounterContract", + "description": "Simple contract that counts numbers", + "type": "contract", + "src": "Counter.sol", + "contractName": "Counter" + }, + { + "name": "CallerContract", + "description": "Simple contract that do contract calls", + "type": "contract", + "src": "Caller.sol", + "contractName": "CallerContract" + },{ + "name": "LargeSizeAspect300K", + "description": "Aspect with a size of 300Kb", + "type": "aspect", + "src": "abnormal-large-size-aspect-300k.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "LargeSizeAspect1M", + "description": "Aspect with a size of 1Mb", + "type": "aspect", + "src": "abnormal-large-size-aspect-1m.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "DeadLoopAspect", + "description": "Aspect with a dead loop", + "type": "aspect", + "src": "abnormal-dead-loop-aspect.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "OperationBasic", + "description": "Basic Operation Aspect", + "type": "aspect", + "src": "operation-test.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "HostApi", + "description": "HostApi Aspect", + "type": "aspect", + "src": "hostapi.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "JoinPoints", + "description": "Joinpoints Test", + "type": "aspect", + "src": "joinpoints.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "HostApiCrypto", + "description": "Crypto Test", + "type": "aspect", + "src": "hostapi-crypto.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "StaticCallAspect", + "description": "Crypto Test", + "type": "aspect", + "src": "static-call-aspect.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "StorageContract", + "description": "Simple storage contract", + "type": "contract", + "src": "storage.sol", + "contractName": "Storage" + }, + { + "name": "ScheduleTargeContract", + "description": "A schedule target contract", + "type": "contract", + "src": "schedule_target.sol", + "contractName": "ScheduleTarget" + }, + { + "name": "SimpleAccountFactoryContract", + "description": "account-abstraction factory", + "type": "contract", + "src": "SimpleAccountFactory.sol", + "contractName": "AspectEnabledSimpleAccountFactory" + }, + { + "name": "SimpleAccountContract", + "description": "account-abstraction", + "type": "contract", + "src": "SimpleAccountFactory.sol", + "contractName": "AspectEnabledSimpleAccount" + }, + { + "name": "RoyaleContract", + "description": "Royale contract for jit gaming", + "type": "contract", + "src": "Royale.sol", + "contractName": "Royale" + }, + { + "name": "JITGamingAspect", + "description": "jit gaming aspect Test", + "type": "aspect", + "src": "jit-gaming-aspect.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "StorageContract", + "description": "Storage contract store a Person struct", + "type": "contract", + "src": "storage.sol", + "contractName": "Storage" + }, + { + "name": "HoneyPotContract", + "description": "HoneyPot contract for the attack and defense drills", + "type": "contract", + "src": "HoneyPotAttack.sol", + "contractName": "HoneyPot" + }, + { + "name": "AttackContract", + "description": "Attack contract for the attack and defense drills", + "type": "contract", + "src": "HoneyPotAttack.sol", + "contractName": "Attack" + }, + { + "name": "GuardByCountAspect", + "description": "guard by count aspect Test", + "type": "aspect", + "src": "guard-by-count.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "GuardByLockAspect", + "description": "guard by lock aspect Test", + "type": "aspect", + "src": "guard-by-lock.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "SessionKeyAspect", + "description": "session key aspect", + "type": "aspect", + "src": "session-key-aspect.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } + }, + { + "name": "SessionKeyContract", + "description": "SessionKey contract that record the points of users", + "type": "contract", + "src": "SessionKey.sol", + "contractName": "SessionKey" + }, + { + "name": "EventContract", + "description": "EventContract publish hello event ", + "type": "contract", + "src": "event.sol", + "contractName": "Event" + } +] diff --git a/packages/testcases/tests/testcases/websocket/websocket-test.json b/packages/testcases/tests/testcases/websocket/websocket-test.json new file mode 100644 index 0000000..9c2ff05 --- /dev/null +++ b/packages/testcases/tests/testcases/websocket/websocket-test.json @@ -0,0 +1,48 @@ +{ + "description": "Test websocket", + "actions": [ + { + "description": "Deploy event contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#EventContract.bytecode", + "abi": "#EventContract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "eventAddress": "receipt.contractAddress" + } + }, + { + "description": "Call subscription tests", + "account": "", + "type": "subscribe", + "options": { + "contract": "$eventAddress", + "method": "sendEvent", + "event": "Log", + "abi": "#EventContract.abi", + "args": [], + "gas": "1000000", + "loop": 3, + "duration": 5000 + }, + "expect": { + "result.errors.length": { + "eq": 0 + }, + "error": { + "eq": "" + } + } + } + ] +} + \ No newline at end of file diff --git a/packages/testcases/tests/utils/TestManager.js b/packages/testcases/tests/utils/TestManager.js new file mode 100644 index 0000000..fbcac52 --- /dev/null +++ b/packages/testcases/tests/utils/TestManager.js @@ -0,0 +1,494 @@ +import fs from 'fs'; +import path, { dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { compress } from 'brotli'; +import { describe, it } from 'mocha'; +import solc from 'solc'; +import Web3 from '@artela/web3'; +import { keccak256 } from '@ethersproject/keccak256'; +import { AspectVersionAction } from '../actions/AspectVersionAction.js'; +import { BindAspectAction } from '../actions/BindAspectAction.js'; +import { CallContractAction } from '../actions/CallContractAction.js'; +import { ChangeVersionAction } from '../actions/ChangeVersionAction.js'; +import { CreateAccountsAction } from '../actions/CreateAccountsAction.js'; +import { DeployAspectAction } from '../actions/DeployAspectAction.js'; +import { DeployContractAction } from '../actions/DeployContractAction.js'; +import { QueryAspectBindingsAction } from '../actions/QueryAspectBindingsAction.js'; +import { QueryContractBindingsAction } from '../actions/QueryContractBindingsAction.js'; +import { UnbindAspectAction } from '../actions/UnbindAspectAction.js'; +import { UpgradeAspectAction } from '../actions/UpgradeAspectAction.js'; +import { BindMultiAspectsAction } from '../actions/BindMultiAspectsAction.js'; +import { DeployMultiAspectsAction } from '../actions/DeployMultiAspectsAction.js'; +import { CallOperationAction } from '../actions/CallOperationAction.js'; +import { QueryBasicAction } from '../actions/QueryBasicAction.js'; +import { TransferAction } from '../actions/TransferAction.js'; +import { GetSessionKeyCallDataAction } from '../actions/GetSessionKeyCallDataAction.js'; +import { DeployMultiContractsAction } from '../actions/DeployMultiContractsAction.js'; +import { BindMultiContractsAction } from '../actions/BindMultiContractsAction.js'; +import { JsonRPCAction } from '../actions/JsonRPCAction.js'; +import { SubscriptionAction } from '../actions/SubscriptionAction.js'; + +const listeners = process.listeners('unhandledRejection'); +process.removeListener('unhandledRejection', listeners[listeners.length - 1]); + +export const __filename = fileURLToPath(import.meta.url); +export const __dirname = dirname(__filename); + +// Recursively look up until you find a directory that contains package.json +const findRootDirectory = dir => { + if (fs.existsSync(path.join(dir, 'package.json'))) { + return dir; + } + + // If the root directory of the file system has been reached, the search is stopped + const parentDir = path.resolve(dir, '..'); + if (parentDir === dir) { + throw new Error('the root of the project could not be found'); + } + + // keep looking up + return findRootDirectory(parentDir); +}; + +export class TestManager { + constructor() { + this.rootDir = findRootDirectory(__dirname); + this.testCaseDir = path.join(this.rootDir, 'tests/testcases'); + this.aspectPath = path.join(this.rootDir, 'aspect'); + this.contractPath = path.join(this.rootDir, 'contracts'); + this.configPath = path.join(this.rootDir, 'project.config.json'); + this.privateKeyPath = path.join(this.rootDir, 'privateKey.txt'); + this.sourcesPath = path.join(this.rootDir, 'tests/testcases/sources.json'); + + const { nodeUrl, wsUrl } = this.getNodeUrl(); + this.nodeUrl = nodeUrl; + this.wsUrl = wsUrl; + this.web3 = this.connectToNode(this.nodeUrl); + this.ws = this.connectToWS(this.wsUrl); + this.account = this.addAccount(this.web3, this.readPrivateKey()); + this.actionRegistry = {}; + this.context = {}; + this.ARTELA_ADDRESS = '0x0000000000000000000000000000000000A27E14'; + + // Register all action handlers + this.registerAction('deployAspect', DeployAspectAction); + this.registerAction('deployContract', DeployContractAction); + this.registerAction('upgradeAspect', UpgradeAspectAction); + this.registerAction('bind', BindAspectAction); + this.registerAction('unbind', UnbindAspectAction); + this.registerAction('queryContractBindings', QueryContractBindingsAction); + this.registerAction('queryAspectBindings', QueryAspectBindingsAction); + this.registerAction('callContract', CallContractAction); + this.registerAction('aspectVersion', AspectVersionAction); + this.registerAction('createAccounts', CreateAccountsAction); + this.registerAction('changeVersion', ChangeVersionAction); + this.registerAction('bindMultiAspects', BindMultiAspectsAction); + this.registerAction('deployMultiAspects', DeployMultiAspectsAction); + this.registerAction('callOperation', CallOperationAction); + this.registerAction('queryBasic', QueryBasicAction); + this.registerAction('transfer', TransferAction); + this.registerAction("getSessionKeyCallData", GetSessionKeyCallDataAction); + this.registerAction('deployMultiContracts', DeployMultiContractsAction); + this.registerAction('bindMultiContracts', BindMultiContractsAction); + this.registerAction('jsonRPC', JsonRPCAction); + this.registerAction('subscribe', SubscriptionAction); + } + + async compileAspect(source) { + console.log(`⤷ 🔨 Compiling aspect ${source.name}...`); + + const results = {}; + const memoryFS = { + writeFile(filename, contents, baseDir) { + results[filename] = contents; + }, + }; + + const entryFile = path.join(this.aspectPath, source.src); + const compileArgs = [ + entryFile, + '--lib', + path.join(this.rootDir, 'node_modules'), + '--outFile', + 'output.wasm', + ]; + + if (source.compileOptions.args) { + compileArgs.push(...source.compileOptions.args); + } else { + // default compile options + compileArgs.push( + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ); + } + + // console.log(`🔨 Compiling aspect ${source.name} with args:`, compileArgs); + + const nullWriteStream = { + write: () => { }, + }; + + const asc = await import('assemblyscript/asc'); + await asc + .main(compileArgs, { + writeFile: memoryFS.writeFile, + stdout: nullWriteStream, + stderr: nullWriteStream, + }) + .then(() => { + const wasmBinary = results['output.wasm']; + + if (source.compileOptions.compress) { + console.log(' ⤷ 📦 Applying bytecode compression...'); + + // compress with brotli + const compressedData = compress(wasmBinary, { + mode: 0, // Generic mode + quality: 11, // Highest quality compression + lgwin: 22, // Default window size + }); + + // calculate checksum + const checkSum = keccak256(compressedData).slice(2, 10); + const checkSumBuffer = Buffer.from(checkSum, 'hex'); + + // create header + const header = Buffer.from([0x00, 0x00, 0x00, 0x01]); + + // build the final bytes + const outputData = Buffer.concat([header, checkSumBuffer, compressedData]); + source.bytecode = '0x' + outputData.toString('hex'); + } else { + source.bytecode = '0x' + Buffer.from(wasmBinary).toString('hex'); + } + + fs.writeFileSync(source.name + '.wasm', wasmBinary); + + console.log(' ⤷ ✅ Compilation succeeded!'); + }) + .catch(err => { + if (err) { + console.error(' ⤷ ❌ Compilation failed:', err); + return; + } + }); + } + + compileContract(source) { + console.log(`⤷ 🔨 Compiling contract ${source.name}...`); + const filePath = path.join(this.contractPath, source.src); + const sourceFile = fs.readFileSync(filePath, 'utf8'); + + const input = { + language: 'Solidity', + sources: { + 'contract.sol': { + content: sourceFile, + }, + }, + settings: { + outputSelection: { + '*': { + '*': ['abi', 'evm.bytecode.object'], + }, + }, + }, + }; + + const output = JSON.parse(solc.compile(JSON.stringify(input))); + + if (output.errors) { + output.errors.forEach(err => { + console.error(err.formattedMessage); + }); + } + + for (const contractName in output.contracts['contract.sol']) { + if (contractName === source.contractName) { + source.bytecode = output.contracts['contract.sol'][contractName].evm.bytecode.object; + source.abi = output.contracts['contract.sol'][contractName].abi; + } + } + + console.log(` ⤷ ✅ Contract ${source.name} compiled successfully!`); + } + + connectToNode(nodeUrl) { + return new Web3(nodeUrl); + } + + connectToWS(wsUrl) { + return new Web3(new Web3.providers.WebsocketProvider(wsUrl)); + } + + disconnectWS() { + return this.ws.currentProvider.disconnect(); + } + + getNodeUrl() { + let nodeUrl, wsUrl; + const config = JSON.parse(fs.readFileSync(this.configPath, 'utf-8')); + nodeUrl = config.node; + wsUrl = config.nodeWS; + + if (!nodeUrl) { + throw new Error('Node URL cannot be empty. Please provide a valid configuration.'); + } + + if (!wsUrl) { + throw new Error('Websocket URL cannot be empty. Please provide a configration "nodeWS": "ws://127.0.0.1:8546"') + } + return { nodeUrl, wsUrl }; + } + + readPrivateKey() { + return fs.readFileSync(this.privateKeyPath, 'utf-8').trim(); + } + + addAccount(web3, privateKey) { + const account = web3.eth.accounts.privateKeyToAccount(privateKey); + web3.eth.accounts.wallet.add(account); + return account; + } + + async loadSources() { + console.log('🚗 Initializing sources...'); + const sources = JSON.parse(fs.readFileSync(this.sourcesPath, 'utf-8')); + + for (const source of sources) { + if (source.type === 'aspect') { + await this.compileAspect(source); + } else if (source.type === 'contract') { + this.compileContract(source); + } else { + throw new Error(`Unsupported source type ${source.type}`); + } + } + + this.sources = sources; + console.log('✅ All sources loaded'); + } + + getSource(name) { + return this.sources.find(src => src.name === name); + } + + async getGasPrice() { + return await this.web3.eth.getGasPrice(); + } + + replaceNestedVariables(input, context, trimPrefix = '') { + if (Array.isArray(input)) { + return input.map(str => this.replaceNestedVariables(str, context, trimPrefix)); + } else if (typeof input === 'string') { + + if (input && input.trim() != "") { + const regex = /\$[a-zA-Z0-9_]+/g; + const data = input.replace(regex, (match) => { + const key = match.slice(1); + const value = this.replaceVariables( + '$' + key, + context, + ); + if (trimPrefix && trimPrefix != '' && value.startsWith(trimPrefix)) { + return value.slice(trimPrefix.length); + } + return value; + }); + return data; + } + } + + return input; + } + + replaceVariables(obj, context) { + if (typeof obj === 'string') { + if (obj.startsWith('$')) { + const variableName = obj.substring(1); + const parts = variableName.split('.'); + let value = context; + parts.forEach(part => { + value = value[part]; + if (value === undefined) { + throw new Error(`Variable ${variableName} not found in context`); + } + }); + return value; + } else if (obj.startsWith('#')) { + const splits = obj.substring(1).split('.'); + const sourceName = splits[0]; + const property = splits[1]; + const source = this.getSource(sourceName); + if (!source) { + throw new Error(`Source ${sourceName} not found`); + } + + return source[property]; + } + } else if (Array.isArray(obj)) { + const testManager = this; + return obj.map(item => testManager.replaceVariables(item, context)); + } else if (typeof obj === 'object') { + for (const key in obj) { + obj[key] = this.replaceVariables(obj[key], context); + } + } + return obj; + } + + registerAction(actionType, actionClass) { + this.actionRegistry[actionType] = actionClass; + } + + getAction(actionType) { + return this.actionRegistry[actionType]; + } + + storeAccounts(accounts) { + accounts.forEach(account => { + this.web3.eth.accounts.wallet.add(account); + }); + } + + async executeAction(action, context) { + const ActionClass = this.getAction(action.type); + if (!ActionClass) { + throw new Error(`No action registered for type: ${action.type}`); + } + const actionInstance = new ActionClass(action); + let result, receipt, tx, err; + try { + action.repeat = action.repeat || 1; + for (let i = 0; i < action.repeat; ++i) { + const res = await actionInstance.execute(this, context); + result = res.result; + receipt = res.receipt; + tx = res.tx; + } + } catch (e) { + err = e; + } + + if (err) { + console.error(' ⤷ ❌ Execution error:', err); + } else { + console.log(' ⤷ ✅ Execution result:', result); + } + + actionInstance.validate(result, receipt, tx, err, context, this); + + // Update context + if (action.output) { + Object.keys(action.output).forEach(key => { + const sourcePath = action.output[key].split('.'); + const sourceType = sourcePath.shift(); + const sourceField = sourcePath.join('.'); + let sourceValue; + + if (sourceType === 'result') { + sourceValue = sourceField + ? sourceField.split('.').reduce((obj, part) => obj && obj[part], result) + : result; + } else if (sourceType === 'receipt') { + sourceValue = sourceField + ? sourceField.split('.').reduce((obj, part) => obj && obj[part], receipt) + : receipt; + } else if (sourceType === 'tx') { + sourceValue = sourceField + ? sourceField.split('.').reduce((obj, part) => obj && obj[part], tx) + : tx; + } else { + throw new Error(`Unknown source type: ${sourceType}`); + } + + context[key] = sourceValue; + }); + } + + return { result, receipt, tx }; + } + + loadTestCases(name) { + const testCases = []; + const files = fs.readdirSync(this.testCaseDir); + const testCaseDir = this.testCaseDir; + + const traverseDir = (dir) => { + const files = fs.readdirSync(dir); + + files.forEach(file => { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat.isDirectory()) { + traverseDir(filePath); + } else if (file.endsWith('-test.json') && (!name || file.includes(name))) { + const testCase = JSON.parse(fs.readFileSync(filePath, 'utf-8')); + testCases.push(testCase); + } + }); + }; + + traverseDir(this.testCaseDir); + return testCases; + } + + expectFail(action) { + const expect = action.expect; + if (!expect) { + return false; + } + + const error = expect.error; + if (!error) { + return false; + } + + for (let k of Object.keys(error)) { + const condition = error[k]; + return k.startsWith('not') ? !condition : !!condition + } + } + + async runTestCases(name) { + const loadSources = this.loadSources.bind(this); + const testCases = this.loadTestCases(name); + const expectFail = this.expectFail; + const execute = this.executeAction.bind(this); // Ensure executeAction is bound correctly + const disconnectWS = this.disconnectWS.bind(this); + + describe('⌚️ Start executing test cases', function () { + this.timeout(1800000); + + before(async function () { + await loadSources(); + }); + + for (const testCase of testCases) { + it(`👉 ${testCase.description}`, async function () { + console.log(`👉 Start test case: ${testCase.description}`); + const context = {}; + for (let i = 0; i < testCase.actions.length; ++i) { + const action = testCase.actions[i]; + console.log(`⤷ ${expectFail(action) ? '🔴' : '🟢'} Executing step ${i + 1}: ${action.description}`); + await execute(action, context); + console.log(''); + } + }); + } + + after(function () { + disconnectWS(); + }); + }); + } +} diff --git a/packages/toolkit/package-lock.json b/packages/toolkit/package-lock.json index 624ded9..f2887cc 100644 --- a/packages/toolkit/package-lock.json +++ b/packages/toolkit/package-lock.json @@ -1,12 +1,12 @@ { "name": "@artela/aspect-tool", - "version": "0.0.51", + "version": "0.0.58", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@artela/aspect-tool", - "version": "0.0.51", + "version": "0.0.58", "license": "ISC", "dependencies": { "@oclif/core": "2.8.8", diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index d200533..6f42891 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -3,6 +3,7 @@ import * as fs from 'fs'; import path from 'path'; import { Command, Flags } from '@oclif/core'; import { WasmIndexTmpl } from '../tmpl/aspect/indextmpl'; +import { TransformTmpl } from "../tmpl/misc/transform"; import { ReadMeTmpl } from '../tmpl/readme'; import { DeployTmpl } from '../tmpl/scripts/aspect-deploy'; import { BindTmpl } from '../tmpl/scripts/bind'; @@ -18,7 +19,7 @@ import { UnbindTmpl } from '../tmpl/scripts/unbind'; const isWinOS = /^win/i.test(process.platform); const toolVersion = '^0.0.60'; -const libVersion = '^0.0.34'; +const libVersion = '^0.0.36'; const web3Version = '^1.9.22'; export default class Init extends Command { @@ -40,8 +41,10 @@ export default class Init extends Command { this.ensureTestsDirectory(flags.dir); this.ensureAsconfigJson(flags.dir); this.ensureGitIgnore(flags.dir); - //package.json + // package.json this.ensurePackageJson(flags.dir); + // transform.mjs + this.ensureTransform(flags.dir); //readme.md this.ensureReadme(flags.dir); this.log('=====Success====='); @@ -144,13 +147,23 @@ export default class Init extends Command { const tsconfigBase = 'node_modules\n' + 'build\n' + '*.txt\n'; // this.log("- Making sure that 'tsconfigs.json' is set up..."); - if (fs.existsSync(tsconfigFile)) { - } else { + if (!fs.existsSync(tsconfigFile)) { fs.writeFileSync(tsconfigFile, tsconfigBase); this.log(' Created: ' + tsconfigFile); } } + ensureTransform(rootDir: string) { + const transformFile = path.join(rootDir, 'transform.mjs'); + + if (fs.existsSync(transformFile)) { + return; + } + + fs.writeFileSync(transformFile, TransformTmpl); + this.log(' Created: ' + transformFile); + } + ensureTsconfigJson(rootDir: string) { const tsconfigFile = path.join(rootDir + '/aspect/', 'tsconfig.json'); const tsconfigBase = 'assemblyscript/std/assembly.json'; @@ -282,8 +295,8 @@ export default class Init extends Command { }; if (!scripts['aspect:build']) { - scripts['asbuild:debug'] = 'asc aspect/index.ts --target debug --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__'; - scripts['asbuild:release'] = 'asc aspect/index.ts --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__'; + scripts['asbuild:debug'] = 'asc aspect/index.ts --transform ./transform.mjs --disable bulk-memory -O0 --debug --runtime stub --exportRuntime --exportStart __aspect_start__ --target debug'; + scripts['asbuild:release'] = 'asc aspect/index.ts --transform ./transform.mjs --disable bulk-memory -O3 --noAssert --runtime stub --exportRuntime --exportStart __aspect_start__ --target release'; scripts['aspect:build'] = 'npm run asbuild:debug && npm run asbuild:release'; pkg['scripts'] = scripts; updated = true; @@ -417,6 +430,21 @@ export default class Init extends Command { pkg['dependencies'] = dependencies; updated = true; } + if (!dependencies['@ethersproject/bytes']) { + dependencies['@ethersproject/bytes'] = '^5.7.0'; + pkg['dependencies'] = dependencies; + updated = true; + } + if (!dependencies['@ethersproject/keccak256']) { + dependencies['@ethersproject/keccak256'] = '^5.7.0'; + pkg['dependencies'] = dependencies; + updated = true; + } + if (!dependencies['brotli']) { + dependencies['brotli'] = '^1.3.3'; + pkg['dependencies'] = dependencies; + updated = true; + } if (updated) { fs.writeFileSync(packageFile, JSON.stringify(pkg, null, 2)); @@ -444,8 +472,8 @@ export default class Init extends Command { 'aspect:deploy': 'npm run aspect:build && node scripts/aspect-deploy.cjs', 'aspect:build': 'npm run asbuild:debug && npm run asbuild:release', 'aspect:gen': 'aspect-tool generate -i ./build/contract -o ./aspect/contract', - 'asbuild:debug': 'asc aspect/index.ts --target debug --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__', - 'asbuild:release': 'asc aspect/index.ts --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__', + 'asbuild:debug': 'asc aspect/index.ts --transform ./transform.mjs --disable bulk-memory -O0 --debug --runtime stub --exportRuntime --exportStart __aspect_start__ --target debug --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__', + 'asbuild:release': 'asc aspect/index.ts --transform ./transform.mjs --disable bulk-memory -O3 --noAssert --runtime stub --exportRuntime --exportStart __aspect_start__ --target release --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__', 'operation:call': 'node scripts/operation.cjs --isCall true', 'operation:send': 'node scripts/operation.cjs --isCall false', 'bound:aspect': 'node scripts/get-bound-aspect.cjs', @@ -464,6 +492,9 @@ export default class Init extends Command { '@artela/web3': web3Version, '@assemblyscript/loader': '^0.27.23', 'as-proto': '^1.3.0', + '@ethersproject/bytes': '^5.7.0', + '@ethersproject/keccak256': '^5.7.0', + 'brotli': '^1.3.3' }, devDependencies: { '@artela/aspect-tool': toolVersion, diff --git a/packages/toolkit/src/tmpl/misc/transform.ts b/packages/toolkit/src/tmpl/misc/transform.ts new file mode 100644 index 0000000..b470435 --- /dev/null +++ b/packages/toolkit/src/tmpl/misc/transform.ts @@ -0,0 +1,47 @@ +export const TransformTmpl = ` +import { keccak256 } from "@ethersproject/keccak256"; +import { Transform } from "assemblyscript/transform"; +import { compress } from "brotli"; +import fs from "fs"; + +class CompressionTransform extends Transform { + afterCompile(asModule) { + console.log("Applying bytecode compression..."); + + const options = this.program.options; + const optimizeLevel = options.optimizeLevelHint; + const isRelease = optimizeLevel> 0; + // get wasm bytecode + const wasmData = Buffer.from(asModule.emitBinary()); + + // compress with brotli + const compressedData = compress(wasmData, { + mode: 0, // Generic mode + quality: 11, // Highest quality compression + lgwin: 22 // Default window size + }); + + // calculate checksum + const checkSum = keccak256(compressedData).slice(2, 10); + const checkSumBuffer = Buffer.from(checkSum, "hex"); + + // create header + const header = Buffer.from([ 0x00, 0x00, 0x00, 0x01 ]); + + // build the final bytes + const outputData = Buffer.concat([ header, checkSumBuffer, compressedData ]); + + // save it + const outputFile = isRelease ? 'build/release.wasm.br' : 'build/debug.wasm.br'; + if (!fs.existsSync("build")) { + fs.mkdirSync("build"); + } + fs.writeFileSync(outputFile, outputData); + + console.log(\`Compressed bytecode, from \${wasmData.length} to \${outputData.length} bytes. Checksum: 0x\${checkSum}\`); + } +} + +export default CompressionTransform; + +` diff --git a/packages/toolkit/src/tmpl/scripts/aspect-deploy.ts b/packages/toolkit/src/tmpl/scripts/aspect-deploy.ts index 8aef2ae..59121f4 100644 --- a/packages/toolkit/src/tmpl/scripts/aspect-deploy.ts +++ b/packages/toolkit/src/tmpl/scripts/aspect-deploy.ts @@ -6,6 +6,7 @@ const argv = require('yargs') .string('node') .string('skfile') .string('gas') + .string('initdata') .string('wasm') .string('properties') .array('joinPoints') @@ -59,7 +60,8 @@ async function deploy() { // --wasm ./build/release.wasm let wasmPath = String(argv.wasm) if (!wasmPath || wasmPath === 'undefined') { - aspectCode = fs.readFileSync('./build/release.wasm', {encoding: "hex"}); + const bytecodePath = fs.existsSync('./build/release.wasm.br') ? './build/release.wasm.br' : './build/release.wasm'; + aspectCode = fs.readFileSync(bytecodePath, { encoding: "hex" }); } else { aspectCode = fs.readFileSync(wasmPath, {encoding: "hex"}); } @@ -67,11 +69,14 @@ async function deploy() { console.log("aspectCode cannot be empty") process.exit(0) } + + const initData = argv.initdata || '0x'; // to deploy aspect let aspect = new web3.atl.Aspect(); let deploy = await aspect.deploy({ data: '0x' + aspectCode, + initData, properties, joinPoints, paymaster: sender.address, @@ -83,7 +88,7 @@ async function deploy() { data: deploy.encodeABI(), to: ARTELA_ADDR, gasPrice, - gas: !parseInt(argv.gas) | 9000000 + gas: argv.gas ? parseInt(argv.gas) : await deploy.estimateGas({from: sender.address}) } let signedTx = await web3.atl.accounts.signTransaction(tx, sender.privateKey); console.log("sending signed transaction..."); diff --git a/packages/toolkit/src/tmpl/scripts/bind.ts b/packages/toolkit/src/tmpl/scripts/bind.ts index bece811..a7b5a16 100644 --- a/packages/toolkit/src/tmpl/scripts/bind.ts +++ b/packages/toolkit/src/tmpl/scripts/bind.ts @@ -78,7 +78,7 @@ async function bind() { data: bind.encodeABI(), gasPrice, to: ASPECT_ADDR, - gas: !parseInt(argv.gas) | 9000000 + gas: argv.gas ? parseInt(argv.gas) : await bind.estimateGas({from: sender.address}) } let signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); diff --git a/packages/toolkit/src/tmpl/scripts/contract-call.ts b/packages/toolkit/src/tmpl/scripts/contract-call.ts index 354b1cf..8e6e27f 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-call.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-call.ts @@ -80,7 +80,7 @@ async function call() { process.exit(0) } let storageInstance = new web3.eth.Contract(abi, contractAddr); - let instance = await storageInstance.methods[method](...parameters).call(); + let instance = await storageInstance.methods[method](...parameters).call({from: sender.address}); console.log("==== result ====" + instance); } diff --git a/packages/toolkit/src/tmpl/scripts/contract-deploy.ts b/packages/toolkit/src/tmpl/scripts/contract-deploy.ts index 112e379..ef2d57e 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-deploy.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-deploy.ts @@ -98,31 +98,30 @@ async function deploy() { { const contractAbi = JSON.parse(abiTxt); - // instantiate an instance of demo contract - let tokenContract = new web3.eth.Contract(contractAbi); + // instantiate an instance of contract + let contract = new web3.eth.Contract(contractAbi); - // deploy token contract - let tokenDeploy = tokenContract.deploy(deployParams); + // deploy contract + let deploy = contract.deploy(deployParams); let nonceVal = await web3.eth.getTransactionCount(account.address); - let tokenTx = { + let tx = { from: account.address, - data: tokenDeploy.encodeABI(), + data: deploy.encodeABI(), nonce: nonceVal, - gas: !parseInt(argv.gas) | 7000000 + gas: argv.gas ? parseInt(argv.gas) : await deploy.estimateGas({from: account.address}) } - - let signedTokenTx = await web3.eth.accounts.signTransaction(tokenTx, account.privateKey); - console.log('deploy contract tx hash: ' + signedTokenTx.transactionHash); - await web3.eth.sendSignedTransaction(signedTokenTx.rawTransaction) + let signedTx = await web3.eth.accounts.signTransaction(tx, account.privateKey); + console.log('deploy contract tx hash: ' + signedTx.transactionHash); + await web3.eth.sendSignedTransaction(signedTx.rawTransaction) .on('receipt', receipt => { console.log(receipt); console.log("contract address: ", receipt.contractAddress); contractAddress = receipt.contractAddress; }); } - console.log(\`--contractAccount \${account.address} --contractAddress \${contractAddress}\`); + console.log(\`contractAddress: \${contractAddress}\`); } diff --git a/packages/toolkit/src/tmpl/scripts/contract-send.ts b/packages/toolkit/src/tmpl/scripts/contract-send.ts index fd36d35..b8685c7 100644 --- a/packages/toolkit/src/tmpl/scripts/contract-send.ts +++ b/packages/toolkit/src/tmpl/scripts/contract-send.ts @@ -83,15 +83,15 @@ async function send() { process.exit(0) } - let storageInstance = new web3.eth.Contract(abi, contractAddr); - let instance = storageInstance.methods[method](...parameters); + let contract = new web3.eth.Contract(abi, contractAddr); + let instance = contract.methods[method](...parameters); let tx = { from: sender.address, to: contractAddr, data: instance.encodeABI(), gasPrice, - gas: !parseInt(argv.gas) | 4000000 + gas: argv.gas ? parseInt(argv.gas) : await instance.estimateGas({from: sender.address}) } let signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); console.log('call contract tx hash: ' + signedTx.transactionHash); diff --git a/packages/toolkit/src/tmpl/scripts/operation.ts b/packages/toolkit/src/tmpl/scripts/operation.ts index 476d60b..3654669 100644 --- a/packages/toolkit/src/tmpl/scripts/operation.ts +++ b/packages/toolkit/src/tmpl/scripts/operation.ts @@ -50,31 +50,31 @@ async function operationCall() { console.log("'aspectId' cannot be empty, please set by the parameter' --aspectId 0xxxx'") process.exit(0) } - + + const isCall = argv.isCall; const aspectContract = new web3.atl.aspectCore(); - const aspectInstance = new web3.atl.Aspect(aspectId); + const operation = aspectInstance.operation(callData); - const encodeABI = aspectInstance.operation(callData).encodeABI(); - - const tx = { - from: sender.address, - to: aspectContract.options.address, - data: encodeABI, - gasPrice, - gas: 900_000 - } - const isCall = argv.isCall - - const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); if (isCall) { let callResult = await web3.eth.call({ + from: sender.address, to: aspectContract.options.address, - data: encodeABI + data: operation.encodeABI() }); const rest = web3.eth.abi.decodeParameter('string', callResult); console.log('operation call result: ' + rest); } else { + const tx = { + from: sender.address, + to: aspectContract.options.address, + data: operation.encodeABI(), + gasPrice, + gas: argv.gas ? parseInt(argv.gas) : await operation.estimateGas({from: sender.address}) + } + + const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); + await web3.eth.sendSignedTransaction(signedTx.rawTransaction) .on('receipt', receipt => { console.log(receipt); diff --git a/packages/toolkit/src/tmpl/scripts/unbind.ts b/packages/toolkit/src/tmpl/scripts/unbind.ts index 09db0c7..68ec436 100644 --- a/packages/toolkit/src/tmpl/scripts/unbind.ts +++ b/packages/toolkit/src/tmpl/scripts/unbind.ts @@ -63,7 +63,7 @@ async function unbind() { data: unbind.encodeABI(), gasPrice, to: aspectContract.options.address, - gas: !parseInt(argv.gas) | 9000000 + gas: argv.gas ? parseInt(argv.gas) : await unbind.estimateGas({from: sender.address}) } const signedTx = await web3.eth.accounts.signTransaction(tx, sender.privateKey); From 932865a009e4d56cac59283b21799c6ef18f1213 Mon Sep 17 00:00:00 2001 From: No-Brainer <125658152+dumbeng@users.noreply.github.com> Date: Fri, 6 Sep 2024 19:01:25 +0800 Subject: [PATCH 13/17] build/bump-version (#56) * build: bump package versions * build: bump package versions --- packages/toolkit/package.json | 2 +- packages/toolkit/src/commands/init.ts | 4 +- pnpm-lock.yaml | 2485 +++---------------------- 3 files changed, 292 insertions(+), 2199 deletions(-) diff --git a/packages/toolkit/package.json b/packages/toolkit/package.json index 9d36493..97c7607 100644 --- a/packages/toolkit/package.json +++ b/packages/toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@artela/aspect-tool", - "version": "0.0.60", + "version": "0.0.62", "description": "Dev tool for aspect to generate libs from solidity storage layout.", "engines": { "node": ">=14" diff --git a/packages/toolkit/src/commands/init.ts b/packages/toolkit/src/commands/init.ts index 6f42891..f9602d5 100755 --- a/packages/toolkit/src/commands/init.ts +++ b/packages/toolkit/src/commands/init.ts @@ -18,9 +18,9 @@ import { UnbindTmpl } from '../tmpl/scripts/unbind'; const isWinOS = /^win/i.test(process.platform); -const toolVersion = '^0.0.60'; +const toolVersion = '^0.0.62'; const libVersion = '^0.0.36'; -const web3Version = '^1.9.22'; +const web3Version = '^1.9.24'; export default class Init extends Command { static description = 'init aspect project in a directory.'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 912522f..e84a3ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,18 +29,27 @@ importers: '@theguild/prettier-config': specifier: ^1.0.0 version: 1.0.0(prettier@2.8.2) + '@types/chai': + specifier: ^4.3.16 + version: 4.3.19 assemblyscript: specifier: ^0.27.23 version: 0.27.27 babel-jest: specifier: ^29.3.1 version: 29.3.1(@babel/core@7.20.5) + chai: + specifier: ^5.1.1 + version: 5.1.1 eslint: specifier: ^8.31.0 version: 8.31.0 jest: specifier: 29.5.0 version: 29.5.0(@types/node@20.3.3)(ts-node@10.9.1(@types/node@20.3.3)(typescript@5.1.6)) + mocha: + specifier: ^10.6.0 + version: 10.7.3 prettier: specifier: ^2.8.2 version: 2.8.2 @@ -73,17 +82,17 @@ importers: specifier: file:../libs version: file:packages/libs '@artela/web3': - specifier: 1.9.22 - version: 1.9.22(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10) - '@artela/web3-atl': - specifier: 1.9.22 - version: 1.9.22(encoding@0.1.13) - '@artela/web3-eth': - specifier: 1.9.22 - version: 1.9.22(encoding@0.1.13) + specifier: file:/Users/jack/Projects/js/web3.js/packages/web3/lib + version: lib@file:../web3.js/packages/web3/lib + '@artela/web3-atl-aspect': + specifier: file:/Users/jack/Projects/js/web3.js/packages/web3-atl-aspect/lib + version: lib@file:../web3.js/packages/web3-atl-aspect/lib + '@artela/web3-core-method': + specifier: file:/Users/jack/Projects/js/web3.js/packages/web3-core-method/lib + version: lib@file:../web3.js/packages/web3-core-method/lib '@artela/web3-utils': - specifier: 1.9.22 - version: 1.9.22 + specifier: file:/Users/jack/Projects/js/web3.js/packages/web3-utils/lib + version: lib@file:../web3.js/packages/web3-utils/lib '@assemblyscript/loader': specifier: ^0.27.5 version: 0.27.27 @@ -96,16 +105,31 @@ importers: bignumber.js: specifier: ^9.1.2 version: 9.1.2 + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 devDependencies: '@artela/aspect-tool': specifier: file:../toolkit version: link:../toolkit + '@ethersproject/keccak256': + specifier: ^5.7.0 + version: 5.7.0 + '@types/mocha': + specifier: ^10.0.7 + version: 10.0.7 as-proto-gen: specifier: ^1.3.0 version: 1.3.0 assemblyscript: specifier: ^0.27.5 version: 0.27.27 + brotli: + specifier: ^1.3.3 + version: 1.3.3 + solc: + specifier: ^0.8.26 + version: 0.8.27 yargs: specifier: ^17.7.2 version: 17.7.2 @@ -195,38 +219,6 @@ packages: '@artela/aspect-libs@file:packages/libs': resolution: {directory: packages/libs, type: directory} - '@artela/web3-atl-aspect@1.9.22': - resolution: {integrity: sha512-8zRRiI6qeDLXf1ayUNtb+E4xn4/RmoIb6gwO2bkUK1/FTdHIlelJb9YJ0N72g/aXmcYoOUYxfAFEBmfvTC+63g==} - engines: {node: '>=8.0.0'} - - '@artela/web3-atl@1.9.22': - resolution: {integrity: sha512-G35nCxa1hgQzPvMVMSxZFQqiV5CTEKg1+HQBW2L9M8UnplvG2Yot4MS3t3j0QHRiv+FFJA2ov7Ie9ioXvofFUQ==} - engines: {node: '>=8.0.0'} - - '@artela/web3-core-method@1.9.22': - resolution: {integrity: sha512-e7iRkhVwV4uXzlLWXAy6vrzjiNHww2sSVLmI6lVfZVLu7HRi33ef5l0voddPrigXPnsBtFgOKIKJerAcc3e4eg==} - engines: {node: '>=8.0.0'} - - '@artela/web3-core@1.9.22': - resolution: {integrity: sha512-viXbTD9ZvXPV+xdNkfT5gQ7HJ38M1DBF/Lv1SoUysIP7CH99hra4G9ogi13B5i+jBKtjTLErD+uLMN7u4vqZqA==} - engines: {node: '>=8.0.0'} - - '@artela/web3-eth-contract@1.9.22': - resolution: {integrity: sha512-dk+NC/AlZtL+iBqMPzQhPTnUE094GDmbU/Q8nEhUaXC6xfC/QEpsEJSUeZeqw26EG8VRl6ve2Nbu080WoOgS/Q==} - engines: {node: '>=8.0.0'} - - '@artela/web3-eth@1.9.22': - resolution: {integrity: sha512-bem9MOtMDf7Zppy9j6Z28jUhjYY95UX+pQzeDPJDedodYMJVdoO7DHc7FEEZOMDlYgagK7vuIFq9GLEWAxBaLg==} - engines: {node: '>=8.0.0'} - - '@artela/web3-utils@1.9.22': - resolution: {integrity: sha512-aE2WtpvmEAPxO7JrJ1lf7nhN2SLm09geIThYrSTYxITB/4GONcOD+0aY8y0G5WzFQAz9jF4wfhSAdj4+uIMDKQ==} - engines: {node: '>=8.0.0'} - - '@artela/web3@1.9.22': - resolution: {integrity: sha512-gyO0uiwEEEw+/IV1Lw14rUeOf9el54rpuK8gP44tnHXbK0D4EzwpO/944Pah+foJvsHu+AL3+b4sd8zN51e5KQ==} - engines: {node: '>=8.0.0'} - '@assemblyscript/loader@0.27.27': resolution: {integrity: sha512-zeAM5zx4CT9shQuES+4UNfLVzlmkRrY9W1LujuEhS1xI/qcHr3BsU4SAOylR4D2lsRjhwcdqNEZkph/zA7+5Vg==} @@ -900,9 +892,6 @@ packages: resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@ethereumjs/common@2.5.0': - resolution: {integrity: sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==} - '@ethereumjs/common@4.3.0': resolution: {integrity: sha512-shBNJ0ewcPNTUfZduHiczPmqkfJDn0Dh/9BR5fq7xUFTuIq7Fu1Vx00XDwQVIrpVL70oycZocOhBM6nDO+4FEQ==} @@ -911,9 +900,6 @@ packages: engines: {node: '>=18'} hasBin: true - '@ethereumjs/tx@3.3.2': - resolution: {integrity: sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==} - '@ethereumjs/tx@5.3.0': resolution: {integrity: sha512-uv++XYuIfuqYbvymL3/o14hHuC6zX0nRQ1nI2FHsbkkorLZ2ChEIDqVeeVk7Xc9/jQNU/22sk9qZZkRlsveXxw==} engines: {node: '>=18'} @@ -922,60 +908,15 @@ packages: resolution: {integrity: sha512-PmwzWDflky+7jlZIFqiGsBPap12tk9zK5SVH9YW2OEnDN7OEhCjUOMzbOqwuClrbkSIkM2ERivd7sXZ48Rh/vg==} engines: {node: '>=18'} - '@ethersproject/abi@5.7.0': - resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} - - '@ethersproject/abstract-provider@5.7.0': - resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} - - '@ethersproject/abstract-signer@5.7.0': - resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} - - '@ethersproject/address@5.7.0': - resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} - - '@ethersproject/base64@5.7.0': - resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} - - '@ethersproject/bignumber@5.7.0': - resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} - '@ethersproject/bytes@5.7.0': resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} - '@ethersproject/constants@5.7.0': - resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} - - '@ethersproject/hash@5.7.0': - resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} - '@ethersproject/keccak256@5.7.0': resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} '@ethersproject/logger@5.7.0': resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} - '@ethersproject/networks@5.7.1': - resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} - - '@ethersproject/properties@5.7.0': - resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} - - '@ethersproject/rlp@5.7.0': - resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} - - '@ethersproject/signing-key@5.7.0': - resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} - - '@ethersproject/strings@5.7.0': - resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} - - '@ethersproject/transactions@5.7.0': - resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} - - '@ethersproject/web@5.7.1': - resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} - '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} @@ -1117,10 +1058,6 @@ packages: resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} engines: {node: '>= 16'} - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1338,10 +1275,6 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - '@theguild/eslint-config@0.9.0': resolution: {integrity: sha512-rPYiVcAxT2j75wUm7nVrFw6oCpSdgFsS3PtVXfWKBhBb3JHSv2249t5SVPkvJKD3WRiVl4952KI5lh9tHT6JBg==} peerDependencies: @@ -1395,15 +1328,15 @@ packages: '@types/babel__traverse@7.20.1': resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==} - '@types/bn.js@5.1.5': - resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} - '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} '@types/chai@4.0.0': resolution: {integrity: sha512-B56eI1x+Av9A7XHsgF0+WyLyBytAQqvdBoaULY3c4TGeKwLm43myB78EeBA8/VQn74KblXM4/ecmjTJJXUUF1A==} + '@types/chai@4.3.19': + resolution: {integrity: sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw==} + '@types/cli-progress@3.11.0': resolution: {integrity: sha512-XhXhBv1R/q2ahF3BM7qT5HLzJNlIL0wbcGyZVjqOTqAybAnsLisd7gy1UCyIqpL+5Iv6XhlSyzjLCnI2sIdbCg==} @@ -1470,6 +1403,9 @@ packages: '@types/minimist@1.2.2': resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + '@types/mocha@10.0.7': + resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} + '@types/mocha@9.0.0': resolution: {integrity: sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==} @@ -1491,18 +1427,12 @@ packages: '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} - '@types/pbkdf2@3.1.2': - resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} - '@types/prettier@2.7.3': resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} '@types/responselike@1.0.0': resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - '@types/secp256k1@4.0.6': - resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} - '@types/semver@6.2.3': resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} @@ -1653,13 +1583,6 @@ packages: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - abortcontroller-polyfill@1.7.5: - resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1773,9 +1696,6 @@ packages: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} @@ -1813,9 +1733,6 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - assemblyscript@0.27.27: resolution: {integrity: sha512-z4ijXsjjk3uespEeCWpO1K2GQySc6bn+LL5dL0tsC2VXNYKFnKDmAh3wefcKazxXHFVhYlxqNfyv96ajaQyINQ==} engines: {node: '>=16', npm: '>=7'} @@ -1826,13 +1743,13 @@ packages: engines: {node: '>=16', npm: '>=7'} hasBin: true - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types-flow@0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} @@ -1840,18 +1757,12 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -1864,12 +1775,6 @@ packages: resolution: {integrity: sha512-goz0xgpRVm4pH89CSUvw2S4ed+XTnGF9/2x/nE3Rl6JEHiiz9wz430RhESTo6AbDTXrONUOUcwwG+U0G2ev7ow==} engines: {node: '>= 10.0.0'} - aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - - aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - axe-core@4.7.2: resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} engines: {node: '>=4'} @@ -1929,15 +1834,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} @@ -1975,25 +1874,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - blakejs@1.2.1: - resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} - - bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - - bn.js@4.11.6: - resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} - - bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - - bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - bplist-parser@0.2.0: resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} engines: {node: '>= 5.10.0'} @@ -2011,38 +1891,23 @@ packages: breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} - brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + brotli@1.3.3: + resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - browserslist@4.21.9: resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - - bs58check@2.1.2: - resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} - bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer-to-arraybuffer@0.0.5: - resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} - - buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - buffer@4.9.2: resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} @@ -2052,10 +1917,6 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - bufferutil@4.0.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} @@ -2070,10 +1931,6 @@ packages: resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} engines: {node: '>=12'} - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - cacache@15.3.0: resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} engines: {node: '>= 10'} @@ -2090,10 +1947,6 @@ packages: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} - cacheable-lookup@6.1.0: - resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} - engines: {node: '>=10.6.0'} - cacheable-request@7.0.4: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} @@ -2124,9 +1977,6 @@ packages: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true - caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2134,6 +1984,10 @@ packages: resolution: {integrity: sha512-FQdXBx+UlDU1RljcWV3/ha2Mm+ooF9IQApHXZA1Az+XYItNtzYPR7e1Ga6WwjTkhCPrE6WhvaCU6b4ljGKbgoQ==} engines: {node: '>=4'} + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2173,12 +2027,17 @@ packages: check-error@1.0.2: resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + chokidar@3.5.1: resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} engines: {node: '>= 8.10.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -2188,20 +2047,9 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} - cids@0.7.5: - resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} - engines: {node: '>=4.0.0', npm: '>=3.0.0'} - deprecated: This module has been superseded by the multiformats module - - cipher-base@1.0.4: - resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} - cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - class-is@1.1.0: - resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} - clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -2297,14 +2145,17 @@ packages: resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==} engines: {node: '>=0.1.90'} - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} commander@7.1.0: resolution: {integrity: sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==} engines: {node: '>= 10'} + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + common-ancestor-path@1.0.1: resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==} @@ -2329,13 +2180,6 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-hash@2.5.2: - resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} - content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -2346,43 +2190,15 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - core-js-compat@3.31.0: resolution: {integrity: sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - - create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - - create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-fetch@3.1.8: - resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} - cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} @@ -2407,10 +2223,6 @@ packages: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} engines: {node: '>= 0.1.90'} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} @@ -2418,9 +2230,9 @@ packages: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} - dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} dataloader@1.4.0: resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} @@ -2432,14 +2244,6 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: @@ -2466,6 +2270,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -2485,14 +2298,6 @@ packages: decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} - decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - - decompress-response@3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} - decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -2504,6 +2309,10 @@ packages: resolution: {integrity: sha512-uts3fF4HnV1bcNx8K5c9NMjXXKtLOf1obUMq04uEuMaF8i1m0SfugbpDMd59cYfodQcMqeUISvL4Pmx5NZ7lcw==} engines: {node: '>=0.12'} + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -2538,10 +2347,6 @@ packages: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -2556,10 +2361,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2587,6 +2388,10 @@ packages: resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} engines: {node: '>=0.3.1'} + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2599,9 +2404,6 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dom-walk@0.1.2: - resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dotenv@8.6.0: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} @@ -2609,12 +2411,6 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.9: resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} engines: {node: '>=0.10.0'} @@ -2623,12 +2419,6 @@ packages: electron-to-chromium@1.4.433: resolution: {integrity: sha512-MGO1k0w1RgrfdbLVwmXcDhHHuxCn2qRgR7dYsJvWFKDttvYPx6FNzCGG0c/fBBvzK2LDh3UV7Tt9awnHnvAAUQ==} - elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} - - elliptic@6.5.5: - resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} - emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} @@ -2639,10 +2429,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -2685,27 +2471,10 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -2973,10 +2742,6 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - espree@9.5.2: resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -3012,46 +2777,13 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - eth-ens-namehash@2.0.8: - resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} - - eth-lib@0.1.29: - resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} - - eth-lib@0.2.8: - resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} - - ethereum-bloom-filters@1.1.0: - resolution: {integrity: sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==} - - ethereum-cryptography@0.1.3: - resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} - ethereum-cryptography@2.1.3: resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} - ethereumjs-util@7.1.5: - resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} - engines: {node: '>=10.0.0'} - - ethjs-unit@0.1.6: - resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} - engines: {node: '>=6.5.0', npm: '>=3'} - - event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@4.0.4: - resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -3063,9 +2795,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -3085,13 +2814,6 @@ packages: exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} - engines: {node: '>= 0.10.0'} - - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} @@ -3102,10 +2824,6 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - fancy-test@2.0.28: resolution: {integrity: sha512-UjTjYRlfdUEkvjIMKZlpqALjkgC3GzjUgWDg9KRv/ulxIqppvQUWMt5mOUmqlrSRlGF/Wj7HyFkWKzz5RujpFg==} engines: {node: '>=12.0.0'} @@ -3139,6 +2857,10 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -3154,10 +2876,6 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3187,6 +2905,15 @@ packages: flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -3194,35 +2921,18 @@ packages: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} - forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - - form-data-encoder@1.7.1: - resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} - - form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} - fs-extra@4.0.3: - resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -3235,9 +2945,6 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} - fs-minipass@1.2.7: - resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} - fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -3286,6 +2993,9 @@ packages: get-func-name@2.0.0: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} @@ -3308,9 +3018,6 @@ packages: get-tsconfig@4.6.0: resolution: {integrity: sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==} - getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -3336,13 +3043,12 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} - - global@4.4.0: - resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -3374,10 +3080,6 @@ packages: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} - got@12.1.0: - resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} - engines: {node: '>=14.16'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3395,15 +3097,6 @@ packages: resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} engines: {node: '>=4.x'} - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -3441,20 +3134,10 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} - hash-base@3.1.0: - resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} - engines: {node: '>=4'} - - hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -3476,13 +3159,6 @@ packages: resolution: {integrity: sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==} engines: {node: '>=8.0.0'} - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-https@1.0.0: - resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} - http-proxy-agent@4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} @@ -3491,18 +3167,10 @@ packages: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -3536,10 +3204,6 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - idna-uts46-hx@2.3.1: - resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} - engines: {node: '>=4.0.0'} - ieee754@1.1.13: resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} @@ -3606,10 +3270,6 @@ packages: ip@2.0.0: resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - is-alphabetical@1.0.4: resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} @@ -3697,9 +3357,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-function@1.0.2: - resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} @@ -3712,10 +3369,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-hex-prefixed@1.0.0: - resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} - engines: {node: '>=6.5.0', npm: '>=3'} - is-hexadecimal@1.0.4: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} @@ -3805,9 +3458,6 @@ packages: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -3840,9 +3490,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - istanbul-lib-coverage@3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} @@ -4008,9 +3655,6 @@ packages: js-sdsl@4.4.1: resolution: {integrity: sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA==} - js-sha3@0.5.7: - resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} - js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} @@ -4025,9 +3669,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -4058,9 +3699,6 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -4096,10 +3734,6 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - jsx-ast-utils@3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} engines: {node: '>=4.0'} @@ -4110,10 +3744,6 @@ packages: just-diff@5.2.0: resolution: {integrity: sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==} - keccak@3.0.4: - resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} - engines: {node: '>=10.0.0'} - keyv@4.5.2: resolution: {integrity: sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==} @@ -4143,6 +3773,18 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lib@file:../web3.js/packages/web3-atl-aspect/lib: + resolution: {directory: ../web3.js/packages/web3-atl-aspect/lib, type: directory} + + lib@file:../web3.js/packages/web3-core-method/lib: + resolution: {directory: ../web3.js/packages/web3-core-method/lib, type: directory} + + lib@file:../web3.js/packages/web3-utils/lib: + resolution: {directory: ../web3.js/packages/web3-utils/lib, type: directory} + + lib@file:../web3.js/packages/web3/lib: + resolution: {directory: ../web3.js/packages/web3/lib, type: directory} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -4203,14 +3845,13 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -4267,9 +3908,6 @@ packages: engines: {node: '>= 12'} hasBin: true - md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} @@ -4300,10 +3938,6 @@ packages: mdast-util-to-string@3.2.0: resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - mem-fs-editor@9.7.0: resolution: {integrity: sha512-ReB3YD24GNykmu4WeUL/FDIQtkoyGB6zfJv60yfCo3QjKeimNcTqv2FT83bP0ccs6uu+sm5zyoBlspAzigmsdg==} engines: {node: '>=12.10.0'} @@ -4317,13 +3951,14 @@ packages: resolution: {integrity: sha512-GftCCBs6EN8sz3BoWO1bCj8t7YBtT713d8bUgbhg9Iel5kFSqnSvCK06TYIDJAtJ51cSiWkM/YemlT0dfoFycw==} engines: {node: '>=12'} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + meow@6.1.1: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4331,10 +3966,6 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -4426,19 +4057,6 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -4455,19 +4073,10 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - min-document@2.19.0: - resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - minimatch@3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} @@ -4528,9 +4137,6 @@ packages: resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} engines: {node: '>=8'} - minipass@2.9.0: - resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} - minipass@3.3.6: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} @@ -4543,9 +4149,6 @@ packages: resolution: {integrity: sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==} engines: {node: '>=16 || 14 >=14.17'} - minizlib@1.3.3: - resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} - minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} @@ -4558,28 +4161,21 @@ packages: resolution: {integrity: sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==} engines: {node: '>=10'} - mkdirp-promise@5.0.1: - resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} - engines: {node: '>=4'} - deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true + mocha@10.7.3: + resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==} + engines: {node: '>= 14.0.0'} + hasBin: true + mocha@9.0.0: resolution: {integrity: sha512-GRGG/q9bIaUkHJB9NL+KZNjDhMBHB30zW3bZW9qOiYr+QChyLjPzswaxFWkI1q6lGlSL28EQYzAi2vKWNkPx+g==} engines: {node: '>= 12.0.0'} hasBin: true - mock-fs@4.14.0: - resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} - mock-stdin@1.0.0: resolution: {integrity: sha512-tukRdb9Beu27t6dN+XztSRHq9J0B/CoAOySGzHfn8UTfmqipA5yNT/sDUEyYdAV3Hpka6Wx6kOMxuObdOex60Q==} @@ -4587,34 +4183,12 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multibase@0.6.1: - resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} - deprecated: This module has been superseded by the multiformats module - - multibase@0.7.0: - resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} - deprecated: This module has been superseded by the multiformats module - - multicodec@0.5.7: - resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} - deprecated: This module has been superseded by the multiformats module - - multicodec@1.0.4: - resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} - deprecated: This module has been superseded by the multiformats module - - multihashes@0.4.21: - resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} - multimap@1.1.0: resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} @@ -4628,9 +4202,6 @@ packages: mvdan-sh@0.10.1: resolution: {integrity: sha512-kMbrH0EObaKmK3nVRKUIIya1dpASHIEusM13S4V1ViHFuxuNxCo+arxoa6j/dbV22YBGjl7UKJm9QQKJ2Crzhg==} - nano-json-stream-parser@0.1.2: - resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} - nanoid@3.1.23: resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4649,9 +4220,6 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} @@ -4659,17 +4227,9 @@ packages: resolution: {integrity: sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==} engines: {node: '>= 10.13'} - node-addon-api@2.0.2: - resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} - - node-fetch@2.6.11: - resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} @@ -4680,9 +4240,9 @@ packages: encoding: optional: true - node-gyp-build@4.8.0: - resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} - hasBin: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} node-gyp@8.4.1: resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} @@ -4807,13 +4367,6 @@ packages: resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - number-to-bn@1.7.0: - resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} - engines: {node: '>=6.5.0', npm: '>=3'} - - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -4848,18 +4401,11 @@ packages: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} - oboe@2.1.5: - resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} - oclif@3.16.0: resolution: {integrity: sha512-qbPJ9SifBDPeMnuYIyJc0+kGyXmLubJs/lOD1wjrvAiKqTWQ1xy/EFlNMgBGETCf7RQf1iSJmvf+s22ZkLc7Ow==} engines: {node: '>=12.0.0'} hasBin: true - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4894,10 +4440,6 @@ packages: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -4970,9 +4512,6 @@ packages: parse-entities@4.0.1: resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} - parse-headers@2.0.5: - resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -4985,10 +4524,6 @@ packages: resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - password-prompt@1.1.2: resolution: {integrity: sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA==} @@ -5019,9 +4554,6 @@ packages: resolution: {integrity: sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==} engines: {node: '>=16 || 14 >=14.17'} - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -5029,12 +4561,9 @@ packages: pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -5139,26 +4668,15 @@ packages: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} punycode@1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} - punycode@2.1.0: - resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} - engines: {node: '>=6'} - punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} @@ -5166,18 +4684,6 @@ packages: pure-rand@6.0.2: resolution: {integrity: sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==} - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - - qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - - query-string@5.1.1: - resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} - engines: {node: '>=0.10.0'} - querystring@0.2.0: resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} engines: {node: '>=0.4.x'} @@ -5200,14 +4706,6 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} - react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -5261,6 +4759,10 @@ packages: resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} engines: {node: '>=8.10.0'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + rechoir@0.6.2: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} @@ -5321,11 +4823,6 @@ packages: resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} engines: {node: '>= 0.10'} - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5390,13 +4887,6 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - - rlp@2.2.7: - resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} - hasBin: true - run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -5437,13 +4927,6 @@ packages: resolution: {integrity: sha512-g3WxHrqSWCZHGHlSrF51VXFdjImhwvH8ZO/pryFH56Qi0cDsZfylQa/t0jCzVQFNbNvM00HfHjkDPEuarKDSWQ==} engines: {node: '>=8'} - scrypt-js@3.0.1: - resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - - secp256k1@4.0.3: - resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} - engines: {node: '>=10.0.0'} - semver@5.5.0: resolution: {integrity: sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==} hasBin: true @@ -5471,38 +4954,19 @@ packages: engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - serialize-javascript@5.0.1: resolution: {integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - - servify@0.1.12: - resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} - engines: {node: '>=6'} + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sh-syntax@0.3.7: resolution: {integrity: sha512-xIB/uRniZ9urxAuXp1Ouh/BKSI1VK8RSqfwGj7cV57HvGrFo3vHdJfv8Tdp/cVcxJgXQTkmHr5mG5rqJW8r4wQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} @@ -5550,12 +5014,6 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@2.8.2: - resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -5592,6 +5050,11 @@ packages: resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + solc@0.8.27: + resolution: {integrity: sha512-BNxMol2tUAbkH7HKlXBcBqrGi2aqgv+uMHz26mJyTtlVgWmBA4ktiw0qVKHfkjf2oaHbwtbtaSeE2dhn/gTAKw==} + engines: {node: '>=10.0.0'} + hasBin: true + sort-keys@4.2.0: resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} engines: {node: '>=8'} @@ -5624,11 +5087,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - ssri@10.0.4: resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5645,10 +5103,6 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - stdout-stderr@0.1.13: resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} engines: {node: '>=8.0.0'} @@ -5656,10 +5110,6 @@ packages: stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} - strict-uri-encode@1.1.0: - resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} - engines: {node: '>=0.10.0'} - string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -5738,10 +5188,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-hex-prefix@1.0.0: - resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} - engines: {node: '>=6.5.0', npm: '>=3'} - strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -5774,9 +5220,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swarm-js@0.1.42: - resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} - synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -5785,10 +5228,6 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar@4.4.19: - resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} - engines: {node: '>=4.5'} - tar@6.1.15: resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} engines: {node: '>=10'} @@ -5811,10 +5250,6 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - timed-out@4.0.1: - resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} - engines: {node: '>=0.10.0'} - titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} @@ -5837,14 +5272,6 @@ packages: to-vfile@7.2.4: resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -5903,9 +5330,6 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -5937,19 +5361,9 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -5971,9 +5385,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ultron@1.1.1: - resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} - unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -6056,10 +5467,6 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -6073,42 +5480,19 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - url-set-query@1.0.0: - resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} - url@0.10.3: resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} - utf-8-validate@5.0.10: - resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} - engines: {node: '>=6.14.2'} - - utf8@3.0.0: - resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} - util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - uuid@8.0.0: resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} hasBin: true - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} @@ -6131,17 +5515,6 @@ packages: resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - varint@5.0.2: - resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} @@ -6183,89 +5556,13 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web3-bzz@1.9.0: - resolution: {integrity: sha512-9Zli9dikX8GdHwBb5/WPzpSVuy3EWMKY3P4EokCQra31fD7DLizqAAaTUsFwnK7xYkw5ogpHgelw9uKHHzNajg==} - engines: {node: '>=8.0.0'} - - web3-core-helpers@1.9.0: - resolution: {integrity: sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg==} - engines: {node: '>=8.0.0'} - - web3-core-method@1.9.0: - resolution: {integrity: sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w==} - engines: {node: '>=8.0.0'} - - web3-core-promievent@1.9.0: - resolution: {integrity: sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ==} - engines: {node: '>=8.0.0'} - - web3-core-requestmanager@1.9.0: - resolution: {integrity: sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q==} - engines: {node: '>=8.0.0'} - - web3-core-subscriptions@1.9.0: - resolution: {integrity: sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA==} - engines: {node: '>=8.0.0'} - - web3-core@1.9.0: - resolution: {integrity: sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w==} - engines: {node: '>=8.0.0'} - - web3-eth-abi@1.9.0: - resolution: {integrity: sha512-0BLQ3FKMrzJkA930jOX3fMaybAyubk06HChclLpiR0NWmgWXm1tmBrJdkyRy2ZTZpmfuZc9xTFRfl0yZID1voA==} - engines: {node: '>=8.0.0'} - - web3-eth-accounts@1.9.0: - resolution: {integrity: sha512-VeIZVevmnSll0AC1k5F/y398ZE89d1SRuYk8IewLUhL/tVAsFEsjl2SGgm0+aDcHmgPrkW+qsCJ+C7rWg/N4ZA==} - engines: {node: '>=8.0.0'} - - web3-eth-contract@1.9.0: - resolution: {integrity: sha512-+j26hpSaEtAdUed0TN5rnc+YZOcjPxMjFX4ZBKatvFkImdbVv/tzTvcHlltubSpgb2ZLyZ89lSL6phKYwd2zNQ==} - engines: {node: '>=8.0.0'} - - web3-eth-ens@1.9.0: - resolution: {integrity: sha512-LOJZeN+AGe9arhuExnrPPFYQr4WSxXEkpvYIlst/joOEUNLDwfndHnJIK6PI5mXaYSROBtTx6erv+HupzGo7vA==} - engines: {node: '>=8.0.0'} - - web3-eth-iban@1.9.0: - resolution: {integrity: sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog==} - engines: {node: '>=8.0.0'} - - web3-eth-personal@1.9.0: - resolution: {integrity: sha512-r9Ldo/luBqJlv1vCUEQnUS+C3a3ZdbYxVHyfDkj6RWMyCqqo8JE41HWE+pfa0RmB1xnGL2g8TbYcHcqItck/qg==} - engines: {node: '>=8.0.0'} - - web3-net@1.9.0: - resolution: {integrity: sha512-L+fDZFgrLM5Y15aonl2q6L+RvfaImAngmC0Jv45hV2FJ5IfRT0/2ob9etxZmvEBWvOpbqSvghfOhJIT3XZ37Pg==} - engines: {node: '>=8.0.0'} - - web3-providers-http@1.9.0: - resolution: {integrity: sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ==} - engines: {node: '>=8.0.0'} - - web3-providers-ipc@1.9.0: - resolution: {integrity: sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA==} - engines: {node: '>=8.0.0'} - - web3-providers-ws@1.9.0: - resolution: {integrity: sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w==} - engines: {node: '>=8.0.0'} - - web3-shh@1.9.0: - resolution: {integrity: sha512-bIBZlralgz4ICCrwkefB2nPPJWfx28NuHIpjB7d9ADKynElubQuqudYhKtSEkKXACuME/BJm0pIFJcJs/gDnMg==} - engines: {node: '>=8.0.0'} - - web3-utils@1.9.0: - resolution: {integrity: sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==} - engines: {node: '>=8.0.0'} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - websocket@1.0.34: - resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} - engines: {node: '>=4.0.0'} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -6317,6 +5614,9 @@ packages: workerpool@6.1.4: resolution: {integrity: sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g==} + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -6336,26 +5636,6 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@3.3.3: - resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xhr-request-promise@0.1.3: - resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} - - xhr-request@1.1.0: - resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} - - xhr@2.6.0: - resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} - xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -6364,10 +5644,6 @@ packages: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -6375,10 +5651,6 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaeti@0.0.6: - resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} - engines: {node: '>=0.10.32'} - yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} @@ -6404,6 +5676,10 @@ packages: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} @@ -6461,123 +5737,6 @@ snapshots: as-proto: 1.3.0 assemblyscript: 0.27.27 - '@artela/web3-atl-aspect@1.9.22(encoding@0.1.13)': - dependencies: - '@artela/web3-core': 1.9.22(encoding@0.1.13) - '@artela/web3-core-method': 1.9.22 - '@artela/web3-eth-contract': 1.9.22(encoding@0.1.13) - '@artela/web3-utils': 1.9.22 - '@ethersproject/address': 5.7.0 - '@types/bn.js': 5.1.5 - web3-core-helpers: 1.9.0 - web3-core-promievent: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-eth-abi: 1.9.0 - web3-eth-accounts: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@artela/web3-atl@1.9.22(encoding@0.1.13)': - dependencies: - '@artela/web3-atl-aspect': 1.9.22(encoding@0.1.13) - '@artela/web3-core': 1.9.22(encoding@0.1.13) - '@artela/web3-core-method': 1.9.22 - '@artela/web3-eth-contract': 1.9.22(encoding@0.1.13) - '@artela/web3-utils': 1.9.22 - web3-core-helpers: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-eth-abi: 1.9.0 - web3-eth-accounts: 1.9.0(encoding@0.1.13) - web3-eth-ens: 1.9.0(encoding@0.1.13) - web3-eth-iban: 1.9.0 - web3-eth-personal: 1.9.0(encoding@0.1.13) - web3-net: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@artela/web3-core-method@1.9.22': - dependencies: - '@artela/web3-utils': 1.9.22 - '@ethersproject/address': 5.7.0 - '@ethersproject/transactions': 5.7.0 - web3-core-helpers: 1.9.0 - web3-core-promievent: 1.9.0 - web3-core-subscriptions: 1.9.0 - - '@artela/web3-core@1.9.22(encoding@0.1.13)': - dependencies: - '@artela/web3-core-method': 1.9.22 - '@artela/web3-utils': 1.9.22 - '@types/bn.js': 5.1.5 - '@types/node': 12.20.55 - bignumber.js: 9.1.2 - web3-core-helpers: 1.9.0 - web3-core-requestmanager: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@artela/web3-eth-contract@1.9.22(encoding@0.1.13)': - dependencies: - '@artela/web3-core': 1.9.22(encoding@0.1.13) - '@artela/web3-core-method': 1.9.22 - '@artela/web3-utils': 1.9.22 - '@types/bn.js': 5.1.5 - web3-core-helpers: 1.9.0 - web3-core-promievent: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-eth-abi: 1.9.0 - web3-eth-accounts: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@artela/web3-eth@1.9.22(encoding@0.1.13)': - dependencies: - '@artela/web3-core': 1.9.22(encoding@0.1.13) - '@artela/web3-core-method': 1.9.22 - '@artela/web3-eth-contract': 1.9.22(encoding@0.1.13) - '@artela/web3-utils': 1.9.22 - web3-core-helpers: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-eth-abi: 1.9.0 - web3-eth-accounts: 1.9.0(encoding@0.1.13) - web3-eth-ens: 1.9.0(encoding@0.1.13) - web3-eth-iban: 1.9.0 - web3-eth-personal: 1.9.0(encoding@0.1.13) - web3-net: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@artela/web3-utils@1.9.22': - dependencies: - bn.js: 5.2.1 - ethereum-bloom-filters: 1.1.0 - ethereumjs-util: 7.1.5 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: 2.1.0 - utf8: 3.0.0 - - '@artela/web3@1.9.22(bufferutil@4.0.8)(encoding@0.1.13)(utf-8-validate@5.0.10)': - dependencies: - '@artela/web3-atl': 1.9.22(encoding@0.1.13) - '@artela/web3-core': 1.9.22(encoding@0.1.13) - '@artela/web3-eth': 1.9.22(encoding@0.1.13) - '@artela/web3-utils': 1.9.22 - web3-bzz: 1.9.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - web3-eth-personal: 1.9.0(encoding@0.1.13) - web3-net: 1.9.0(encoding@0.1.13) - web3-shh: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - '@assemblyscript/loader@0.27.27': {} '@babel/code-frame@7.22.5': @@ -7442,7 +6601,7 @@ snapshots: '@changesets/get-github-info@0.5.2(encoding@0.1.13)': dependencies: dataloader: 1.4.0 - node-fetch: 2.6.11(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -7563,22 +6722,12 @@ snapshots: '@eslint/js@8.42.0': {} - '@ethereumjs/common@2.5.0': - dependencies: - crc-32: 1.2.2 - ethereumjs-util: 7.1.5 - '@ethereumjs/common@4.3.0': dependencies: '@ethereumjs/util': 9.0.3 '@ethereumjs/rlp@5.0.2': {} - '@ethereumjs/tx@3.3.2': - dependencies: - '@ethereumjs/common': 2.5.0 - ethereumjs-util: 7.1.5 - '@ethereumjs/tx@5.3.0': dependencies: '@ethereumjs/common': 4.3.0 @@ -7591,74 +6740,10 @@ snapshots: '@ethereumjs/rlp': 5.0.2 ethereum-cryptography: 2.1.3 - '@ethersproject/abi@5.7.0': - 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': - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - - '@ethersproject/abstract-signer@5.7.0': - 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': - 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': - dependencies: - '@ethersproject/bytes': 5.7.0 - - '@ethersproject/bignumber@5.7.0': - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 - '@ethersproject/bytes@5.7.0': dependencies: '@ethersproject/logger': 5.7.0 - '@ethersproject/constants@5.7.0': - dependencies: - '@ethersproject/bignumber': 5.7.0 - - '@ethersproject/hash@5.7.0': - 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/keccak256@5.7.0': dependencies: '@ethersproject/bytes': 5.7.0 @@ -7666,54 +6751,6 @@ snapshots: '@ethersproject/logger@5.7.0': {} - '@ethersproject/networks@5.7.1': - dependencies: - '@ethersproject/logger': 5.7.0 - - '@ethersproject/properties@5.7.0': - dependencies: - '@ethersproject/logger': 5.7.0 - - '@ethersproject/rlp@5.7.0': - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - - '@ethersproject/signing-key@5.7.0': - 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/strings@5.7.0': - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - - '@ethersproject/transactions@5.7.0': - 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/web@5.7.1': - 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 - '@gar/promisify@1.1.3': {} '@humanwhocodes/config-array@0.11.10': @@ -7964,8 +7001,6 @@ snapshots: '@noble/hashes@1.3.3': {} - '@noble/hashes@1.4.0': {} - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8087,7 +7122,7 @@ snapshots: dependencies: '@npmcli/name-from-folder': 2.0.0 glob: 10.3.1 - minimatch: 9.0.1 + minimatch: 9.0.4 read-package-json-fast: 3.0.2 '@npmcli/metavuln-calculator@2.0.0': @@ -8365,7 +7400,7 @@ snapshots: '@octokit/request-error': 2.1.0 '@octokit/types': 6.41.0 is-plain-object: 5.0.0 - node-fetch: 2.6.11(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding @@ -8436,10 +7471,6 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - '@theguild/eslint-config@0.9.0(eslint@8.31.0)(typescript@5.1.6)': dependencies: '@rushstack/eslint-patch': 1.3.2 @@ -8488,7 +7519,7 @@ snapshots: '@tufjs/models@1.0.4': dependencies: '@tufjs/canonical-json': 1.0.0 - minimatch: 9.0.1 + minimatch: 9.0.4 '@types/acorn@4.0.6': dependencies: @@ -8515,11 +7546,7 @@ snapshots: dependencies: '@babel/types': 7.22.5 - '@types/bn.js@5.1.5': - dependencies: - '@types/node': 20.3.3 - - '@types/cacheable-request@6.0.3': + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 @@ -8528,6 +7555,8 @@ snapshots: '@types/chai@4.0.0': {} + '@types/chai@4.3.19': {} + '@types/cli-progress@3.11.0': dependencies: '@types/node': 20.3.3 @@ -8594,6 +7623,8 @@ snapshots: '@types/minimist@1.2.2': {} + '@types/mocha@10.0.7': {} + '@types/mocha@9.0.0': {} '@types/ms@0.7.31': {} @@ -8608,20 +7639,12 @@ snapshots: '@types/normalize-package-data@2.4.1': {} - '@types/pbkdf2@3.1.2': - dependencies: - '@types/node': 20.3.3 - '@types/prettier@2.7.3': {} '@types/responselike@1.0.0': dependencies: '@types/node': 20.3.3 - '@types/secp256k1@4.0.6': - dependencies: - '@types/node': 20.3.3 - '@types/semver@6.2.3': {} '@types/semver@7.5.0': {} @@ -8697,7 +7720,7 @@ snapshots: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.5.4 + semver: 7.5.2 tsutils: 3.21.0(typescript@5.1.6) optionalDependencies: typescript: 5.1.6 @@ -8869,13 +7892,6 @@ snapshots: dependencies: event-target-shim: 5.0.1 - abortcontroller-polyfill@1.7.5: {} - - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.9.0): dependencies: acorn: 8.9.0 @@ -8978,8 +7994,6 @@ snapshots: array-differ@3.0.0: {} - array-flatten@1.1.1: {} - array-includes@3.1.6: dependencies: call-bind: 1.0.2 @@ -9028,10 +8042,6 @@ snapshots: asap@2.0.6: {} - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - assemblyscript@0.27.27: dependencies: binaryen: 116.0.0-nightly.20240114 @@ -9042,24 +8052,20 @@ snapshots: binaryen: 112.0.0-nightly.20230411 long: 5.2.3 - assert-plus@1.0.0: {} - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} + ast-types-flow@0.0.7: {} astral-regex@2.0.0: {} - async-limiter@1.0.1: {} - async-retry@1.3.3: dependencies: retry: 0.13.1 async@3.2.4: {} - asynckit@0.4.0: {} - at-least-node@1.0.0: {} available-typed-arrays@1.0.5: {} @@ -9077,10 +8083,6 @@ snapshots: uuid: 8.0.0 xml2js: 0.5.0 - aws-sign2@0.7.0: {} - - aws4@1.12.0: {} - axe-core@4.7.2: {} axobject-query@3.2.1: @@ -9180,16 +8182,8 @@ snapshots: balanced-match@1.0.2: {} - base-x@3.0.9: - dependencies: - safe-buffer: 5.2.1 - base64-js@1.5.1: {} - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - before-after-hook@2.2.3: {} better-path-resolve@1.0.0: @@ -9223,33 +8217,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - blakejs@1.2.1: {} - - bluebird@3.7.2: {} - - bn.js@4.11.6: {} - - bn.js@4.12.0: {} - - bn.js@5.2.1: {} - - body-parser@1.20.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - bplist-parser@0.2.0: dependencies: big-integer: 1.6.51 @@ -9271,19 +8238,12 @@ snapshots: dependencies: wcwidth: 1.0.1 - brorand@1.1.0: {} + brotli@1.3.3: + dependencies: + base64-js: 1.5.1 browser-stdout@1.3.1: {} - browserify-aes@1.2.0: - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.4 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - browserslist@4.21.9: dependencies: caniuse-lite: 1.0.30001504 @@ -9291,26 +8251,12 @@ snapshots: node-releases: 2.0.12 update-browserslist-db: 1.0.11(browserslist@4.21.9) - bs58@4.0.1: - dependencies: - base-x: 3.0.9 - - bs58check@2.1.2: - dependencies: - bs58: 4.0.1 - create-hash: 1.2.0 - safe-buffer: 5.2.1 - bser@2.1.1: dependencies: node-int64: 0.4.0 buffer-from@1.1.2: {} - buffer-to-arraybuffer@0.0.5: {} - - buffer-xor@1.0.3: {} - buffer@4.9.2: dependencies: base64-js: 1.5.1 @@ -9327,10 +8273,6 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bufferutil@4.0.8: - dependencies: - node-gyp-build: 4.8.0 - builtin-modules@3.3.0: {} builtins@1.0.3: {} @@ -9343,8 +8285,6 @@ snapshots: dependencies: run-applescript: 5.0.0 - bytes@3.1.2: {} - cacache@15.3.0: dependencies: '@npmcli/fs': 1.1.1 @@ -9408,8 +8348,6 @@ snapshots: cacheable-lookup@5.0.4: {} - cacheable-lookup@6.1.0: {} - cacheable-request@7.0.4: dependencies: clone-response: 1.0.3 @@ -9444,8 +8382,6 @@ snapshots: ansicolors: 0.3.2 redeyed: 2.1.1 - caseless@0.12.0: {} - ccount@2.0.1: {} chai@4.0.0: @@ -9457,6 +8393,14 @@ snapshots: pathval: 1.1.1 type-detect: 4.0.8 + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -9488,6 +8432,8 @@ snapshots: check-error@1.0.2: {} + check-error@2.1.1: {} + chokidar@3.5.1: dependencies: anymatch: 3.1.3 @@ -9500,29 +8446,24 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - chownr@1.1.4: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 chownr@2.0.0: {} ci-info@3.8.0: {} - cids@0.7.5: - dependencies: - buffer: 5.7.1 - class-is: 1.1.0 - multibase: 0.6.1 - multicodec: 1.0.4 - multihashes: 0.4.21 - - cipher-base@1.0.4: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - cjs-module-lexer@1.2.3: {} - class-is@1.1.0: {} - clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -9609,12 +8550,12 @@ snapshots: colors@1.0.3: {} - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 + command-exists@1.2.9: {} commander@7.1.0: {} + commander@8.3.0: {} + common-ancestor-path@1.0.1: {} commondir@1.0.1: {} @@ -9644,66 +8585,20 @@ snapshots: console-control-strings@1.1.0: {} - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-hash@2.5.2: - dependencies: - cids: 0.7.5 - multicodec: 0.5.7 - multihashes: 0.4.21 - content-type@1.0.5: {} convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} - cookie-signature@1.0.6: {} - - cookie@0.6.0: {} - core-js-compat@3.31.0: dependencies: browserslist: 4.21.9 - core-util-is@1.0.2: {} - core-util-is@1.0.3: {} - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - crc-32@1.2.2: {} - - create-hash@1.2.0: - dependencies: - cipher-base: 1.0.4 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - - create-hmac@1.1.7: - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - create-require@1.1.1: {} - cross-fetch@3.1.8(encoding@0.1.13): - dependencies: - node-fetch: 2.7.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - cross-spawn@5.1.0: dependencies: lru-cache: 4.1.5 @@ -9737,18 +8632,11 @@ snapshots: csv-stringify: 5.6.5 stream-transform: 2.1.3 - d@1.0.2: - dependencies: - es5-ext: 0.10.64 - type: 2.7.2 - damerau-levenshtein@1.0.8: {} dargs@7.0.0: {} - dashdash@1.14.1: - dependencies: - assert-plus: 1.0.0 + data-uri-to-buffer@4.0.1: {} dataloader@1.4.0: {} @@ -9758,10 +8646,6 @@ snapshots: dateformat@4.6.3: {} - debug@2.6.9: - dependencies: - ms: 2.0.0 - debug@3.2.7: dependencies: ms: 2.1.3 @@ -9778,6 +8662,12 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.7(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + debuglog@1.0.1: {} decamelize-keys@1.1.1: @@ -9793,12 +8683,6 @@ snapshots: dependencies: character-entities: 2.0.2 - decode-uri-component@0.2.2: {} - - decompress-response@3.3.0: - dependencies: - mimic-response: 1.0.1 - decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 @@ -9809,6 +8693,8 @@ snapshots: dependencies: type-detect: 3.0.0 + deep-eql@5.0.2: {} + deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -9840,8 +8726,6 @@ snapshots: has-property-descriptors: 1.0.0 object-keys: 1.1.1 - delayed-stream@1.0.0: {} - delegates@1.0.0: {} depd@2.0.0: {} @@ -9850,8 +8734,6 @@ snapshots: dequal@2.0.3: {} - destroy@1.2.0: {} - detect-indent@6.1.0: {} detect-newline@3.1.0: {} @@ -9869,6 +8751,8 @@ snapshots: diff@5.1.0: {} + diff@5.2.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -9881,53 +8765,22 @@ snapshots: dependencies: esutils: 2.0.3 - dom-walk@0.1.2: {} - dotenv@8.6.0: {} eastasianwidth@0.2.0: {} - ecc-jsbn@0.1.2: - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - - ee-first@1.1.1: {} - ejs@3.1.9: dependencies: jake: 10.8.7 electron-to-chromium@1.4.433: {} - elliptic@6.5.4: - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - - elliptic@6.5.5: - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - emittery@0.13.1: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - encodeurl@1.0.2: {} - encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -10009,30 +8862,8 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - es5-ext@0.10.64: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - - es6-promise@4.2.8: {} - - es6-symbol@3.1.4: - dependencies: - d: 1.0.2 - ext: 1.7.0 - escalade@3.1.1: {} - escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} escape-string-regexp@2.0.0: {} @@ -10308,7 +9139,7 @@ snapshots: is-core-module: 2.12.1 minimatch: 3.1.2 resolve: 1.22.2 - semver: 7.5.4 + semver: 7.5.2 eslint-plugin-n@15.7.0(eslint@8.42.0): dependencies: @@ -10548,13 +9379,6 @@ snapshots: transitivePeerDependencies: - supports-color - esniff@2.0.1: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.2 - espree@9.5.2: dependencies: acorn: 8.9.0 @@ -10584,54 +9408,6 @@ snapshots: esutils@2.0.3: {} - etag@1.8.1: {} - - eth-ens-namehash@2.0.8: - dependencies: - idna-uts46-hx: 2.3.1 - js-sha3: 0.5.7 - - eth-lib@0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10): - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.5 - nano-json-stream-parser: 0.1.2 - servify: 0.1.12 - ws: 3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10) - xhr-request-promise: 0.1.3 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - eth-lib@0.2.8: - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.5 - xhr-request-promise: 0.1.3 - - ethereum-bloom-filters@1.1.0: - dependencies: - '@noble/hashes': 1.4.0 - - ethereum-cryptography@0.1.3: - dependencies: - '@types/pbkdf2': 3.1.2 - '@types/secp256k1': 4.0.6 - blakejs: 1.2.1 - 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.4 - pbkdf2: 3.1.2 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - scrypt-js: 3.0.1 - secp256k1: 4.0.3 - setimmediate: 1.0.5 - ethereum-cryptography@2.1.3: dependencies: '@noble/curves': 1.3.0 @@ -10639,39 +9415,14 @@ snapshots: '@scure/bip32': 1.3.3 '@scure/bip39': 1.2.2 - ethereumjs-util@7.1.5: - dependencies: - '@types/bn.js': 5.1.5 - bn.js: 5.2.1 - create-hash: 1.2.0 - ethereum-cryptography: 0.1.3 - rlp: 2.2.7 - - ethjs-unit@0.1.6: - dependencies: - bn.js: 4.11.6 - number-to-bn: 1.7.0 - - event-emitter@0.3.5: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-target-shim@5.0.1: {} - eventemitter3@4.0.4: {} - eventemitter3@4.0.7: {} events@1.1.1: {} events@3.3.0: {} - evp_bytestokey@1.0.3: - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - execa@5.1.1: dependencies: cross-spawn: 7.0.3 @@ -10708,46 +9459,6 @@ snapshots: exponential-backoff@3.1.1: {} - express@4.19.2: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.2 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.6.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.2.0 - fresh: 0.5.2 - http-errors: 2.0.0 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.7 - qs: 6.11.0 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 - setprototypeof: 1.2.0 - statuses: 2.0.1 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - ext@1.7.0: - dependencies: - type: 2.7.2 - extend@3.0.2: {} extendable-error@0.1.7: {} @@ -10758,11 +9469,9 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 - extsprintf@1.3.0: {} - fancy-test@2.0.28: dependencies: - '@types/chai': 4.0.0 + '@types/chai': 4.3.19 '@types/lodash': 4.14.195 '@types/node': 20.3.3 '@types/sinon': 10.0.15 @@ -10805,6 +9514,11 @@ snapshots: dependencies: bser: 2.1.1 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -10821,18 +9535,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.2.0: - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.1 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -10865,6 +9567,8 @@ snapshots: flatted@3.2.7: {} + follow-redirects@1.15.9: {} + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -10874,21 +9578,11 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.0.2 - forever-agent@0.6.1: {} - - form-data-encoder@1.7.1: {} - - form-data@2.3.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - format@0.2.2: {} - forwarded@0.2.0: {} - - fresh@0.5.2: {} + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 fs-extra@10.1.0: dependencies: @@ -10896,12 +9590,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.0 - fs-extra@4.0.3: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -10921,10 +9609,6 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.0 - fs-minipass@1.2.7: - dependencies: - minipass: 2.9.0 - fs-minipass@2.1.0: dependencies: minipass: 3.3.6 @@ -10980,6 +9664,8 @@ snapshots: get-func-name@2.0.0: {} + get-func-name@2.0.2: {} + get-intrinsic@1.2.1: dependencies: function-bind: 1.1.1 @@ -11004,10 +9690,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - getpass@0.1.7: - dependencies: - assert-plus: 1.0.0 - github-slugger@1.5.0: {} github-username@6.0.0(encoding@0.1.13): @@ -11058,11 +9740,6 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 - global@4.4.0: - dependencies: - min-document: 2.19.0 - process: 0.11.10 - globals@11.12.0: {} globals@13.20.0: @@ -11110,22 +9787,6 @@ snapshots: p-cancelable: 2.1.1 responselike: 2.0.1 - got@12.1.0: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 5.0.1 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.0 - cacheable-lookup: 6.1.0 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - form-data-encoder: 1.7.1 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 2.0.1 - graceful-fs@4.2.11: {} grapheme-splitter@1.0.4: {} @@ -11136,13 +9797,6 @@ snapshots: growl@1.10.5: {} - har-schema@2.0.0: {} - - har-validator@5.1.5: - dependencies: - ajv: 6.12.6 - har-schema: 2.0.0 - hard-rejection@2.1.0: {} has-bigints@1.0.2: {} @@ -11169,25 +9823,8 @@ snapshots: dependencies: function-bind: 1.1.1 - hash-base@3.1.0: - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - safe-buffer: 5.2.1 - - hash.js@1.1.7: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - he@1.2.0: {} - hmac-drbg@1.0.1: - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - hosted-git-info@2.8.9: {} hosted-git-info@4.1.0: @@ -11213,16 +9850,6 @@ snapshots: transitivePeerDependencies: - supports-color - http-errors@2.0.0: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.1 - toidentifier: 1.0.1 - - http-https@1.0.0: {} - http-proxy-agent@4.0.1: dependencies: '@tootallnate/once': 1.1.2 @@ -11239,22 +9866,11 @@ snapshots: transitivePeerDependencies: - supports-color - http-signature@1.2.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -11285,10 +9901,6 @@ snapshots: safer-buffer: 2.1.2 optional: true - idna-uts46-hx@2.3.1: - dependencies: - punycode: 2.1.0 - ieee754@1.1.13: {} ieee754@1.2.1: {} @@ -11299,7 +9911,7 @@ snapshots: ignore-walk@6.0.3: dependencies: - minimatch: 9.0.1 + minimatch: 9.0.4 ignore@5.2.4: {} @@ -11358,8 +9970,6 @@ snapshots: ip@2.0.0: {} - ipaddr.js@1.9.1: {} - is-alphabetical@1.0.4: {} is-alphabetical@2.0.1: {} @@ -11436,8 +10046,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-function@1.0.2: {} - is-generator-fn@2.1.0: {} is-generator-function@1.0.10: @@ -11448,8 +10056,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-hex-prefixed@1.0.0: {} - is-hexadecimal@1.0.4: {} is-hexadecimal@2.0.1: {} @@ -11519,8 +10125,6 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typedarray@1.0.0: {} - is-unicode-supported@0.1.0: {} is-utf8@0.2.1: {} @@ -11543,8 +10147,6 @@ snapshots: isexe@2.0.0: {} - isstream@0.1.2: {} - istanbul-lib-coverage@3.2.0: {} istanbul-lib-instrument@5.2.1: @@ -11901,8 +10503,6 @@ snapshots: js-sdsl@4.4.1: {} - js-sha3@0.5.7: {} - js-sha3@0.8.0: {} js-tokens@4.0.0: {} @@ -11916,8 +10516,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsbn@0.1.1: {} - jsesc@0.5.0: {} jsesc@2.5.2: {} @@ -11934,8 +10532,6 @@ snapshots: json-schema-traverse@0.4.1: {} - json-schema@0.4.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} json-stringify-nice@1.1.4: {} @@ -11969,13 +10565,6 @@ snapshots: jsonparse@1.3.1: {} - jsprim@1.4.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - jsx-ast-utils@3.3.3: dependencies: array-includes: 3.1.6 @@ -11985,12 +10574,6 @@ snapshots: just-diff@5.2.0: {} - keccak@3.0.4: - dependencies: - node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 - readable-stream: 3.6.2 - keyv@4.5.2: dependencies: json-buffer: 3.0.1 @@ -12014,6 +10597,14 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lib@file:../web3.js/packages/web3-atl-aspect/lib: {} + + lib@file:../web3.js/packages/web3-core-method/lib: {} + + lib@file:../web3.js/packages/web3-utils/lib: {} + + lib@file:../web3.js/packages/web3/lib: {} + lines-and-columns@1.2.4: {} lines-and-columns@2.0.3: {} @@ -12072,9 +10663,11 @@ snapshots: dependencies: js-tokens: 4.0.0 - lowercase-keys@2.0.0: {} + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 - lowercase-keys@3.0.0: {} + lowercase-keys@2.0.0: {} lru-cache@4.1.5: dependencies: @@ -12175,12 +10768,6 @@ snapshots: marked@4.3.0: {} - md5.js@1.3.5: - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - mdast-util-from-markdown@0.8.5: dependencies: '@types/mdast': 3.0.11 @@ -12277,8 +10864,6 @@ snapshots: dependencies: '@types/mdast': 3.0.11 - media-typer@0.3.0: {} - mem-fs-editor@9.7.0(mem-fs@2.3.0): dependencies: binaryextensions: 4.18.0 @@ -12301,6 +10886,8 @@ snapshots: vinyl: 2.2.1 vinyl-file: 3.0.0 + memorystream@0.3.1: {} + meow@6.1.1: dependencies: '@types/minimist': 1.2.2 @@ -12315,14 +10902,10 @@ snapshots: type-fest: 0.13.1 yargs-parser: 18.1.3 - merge-descriptors@1.0.1: {} - merge-stream@2.0.0: {} merge2@1.4.1: {} - methods@1.1.2: {} - micromark-core-commonmark@1.1.0: dependencies: decode-named-character-reference: 1.0.2 @@ -12541,14 +11124,6 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - mimic-fn@2.1.0: {} mimic-fn@4.0.0: {} @@ -12557,16 +11132,8 @@ snapshots: mimic-response@3.1.0: {} - min-document@2.19.0: - dependencies: - dom-walk: 0.1.2 - min-indent@1.0.1: {} - minimalistic-assert@1.0.1: {} - - minimalistic-crypto-utils@1.0.1: {} - minimatch@3.0.4: dependencies: brace-expansion: 1.1.11 @@ -12644,11 +11211,6 @@ snapshots: dependencies: minipass: 3.3.6 - minipass@2.9.0: - dependencies: - safe-buffer: 5.2.1 - yallist: 3.1.1 - minipass@3.3.6: dependencies: yallist: 4.0.0 @@ -12657,10 +11219,6 @@ snapshots: minipass@6.0.2: {} - minizlib@1.3.3: - dependencies: - minipass: 2.9.0 - minizlib@2.1.2: dependencies: minipass: 3.3.6 @@ -12674,15 +11232,30 @@ snapshots: infer-owner: 1.0.4 mkdirp: 1.0.4 - mkdirp-promise@5.0.1: - dependencies: - mkdirp: 1.0.4 + mkdirp@1.0.4: {} - mkdirp@0.5.6: + mocha@10.7.3: dependencies: - minimist: 1.2.8 - - mkdirp@1.0.4: {} + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.7(supports-color@8.1.1) + diff: 5.2.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.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 mocha@9.0.0: dependencies: @@ -12712,43 +11285,14 @@ snapshots: yargs-parser: 20.2.4 yargs-unparser: 2.0.0 - mock-fs@4.14.0: {} - mock-stdin@1.0.0: {} mri@1.2.0: {} - ms@2.0.0: {} - ms@2.1.2: {} ms@2.1.3: {} - multibase@0.6.1: - dependencies: - base-x: 3.0.9 - buffer: 5.7.1 - - multibase@0.7.0: - dependencies: - base-x: 3.0.9 - buffer: 5.7.1 - - multicodec@0.5.7: - dependencies: - varint: 5.0.2 - - multicodec@1.0.4: - dependencies: - buffer: 5.7.1 - varint: 5.0.2 - - multihashes@0.4.21: - dependencies: - buffer: 5.7.1 - multibase: 0.7.0 - varint: 5.0.2 - multimap@1.1.0: {} multimatch@5.0.0: @@ -12763,8 +11307,6 @@ snapshots: mvdan-sh@0.10.1: {} - nano-json-stream-parser@0.1.2: {} - nanoid@3.1.23: {} natural-compare-lite@1.4.0: {} @@ -12775,8 +11317,6 @@ snapshots: negotiator@0.6.3: {} - next-tick@1.1.0: {} - nice-try@1.0.5: {} nock@13.3.1: @@ -12788,13 +11328,7 @@ snapshots: transitivePeerDependencies: - supports-color - node-addon-api@2.0.2: {} - - node-fetch@2.6.11(encoding@0.1.13): - dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 + node-domexception@1.0.0: {} node-fetch@2.7.0(encoding@0.1.13): dependencies: @@ -12802,7 +11336,11 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-gyp-build@4.8.0: {} + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 node-gyp@8.4.1: dependencies: @@ -12983,13 +11521,6 @@ snapshots: gauge: 4.0.4 set-blocking: 2.0.0 - number-to-bn@1.7.0: - dependencies: - bn.js: 4.11.6 - strip-hex-prefix: 1.0.0 - - oauth-sign@0.9.0: {} - object-assign@4.1.1: {} object-inspect@1.12.3: {} @@ -13028,10 +11559,6 @@ snapshots: define-properties: 1.2.0 es-abstract: 1.21.2 - oboe@2.1.5: - dependencies: - http-https: 1.0.0 - oclif@3.16.0(@types/node@20.3.3)(encoding@0.1.13)(mem-fs@2.3.0)(typescript@5.1.6): dependencies: '@oclif/core': 2.15.0(@types/node@20.3.3)(typescript@5.1.6) @@ -13063,10 +11590,6 @@ snapshots: - supports-color - typescript - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -13113,8 +11636,6 @@ snapshots: p-cancelable@2.1.1: {} - p-cancelable@3.0.0: {} - p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -13240,8 +11761,6 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-headers@2.0.5: {} - parse-json@4.0.0: dependencies: error-ex: 1.3.2 @@ -13261,8 +11780,6 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 2.0.3 - parseurl@1.3.3: {} - password-prompt@1.1.2: dependencies: ansi-escapes: 3.2.0 @@ -13285,21 +11802,11 @@ snapshots: lru-cache: 9.1.2 minipass: 6.0.2 - path-to-regexp@0.1.7: {} - path-type@4.0.0: {} pathval@1.1.1: {} - pbkdf2@3.1.2: - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - - performance-now@2.1.0: {} + pathval@2.0.0: {} picocolors@1.0.0: {} @@ -13379,15 +11886,8 @@ snapshots: propagate@2.0.1: {} - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - pseudomap@1.0.2: {} - psl@1.9.0: {} - pump@3.0.0: dependencies: end-of-stream: 1.4.4 @@ -13395,24 +11895,10 @@ snapshots: punycode@1.3.2: {} - punycode@2.1.0: {} - punycode@2.3.0: {} pure-rand@6.0.2: {} - qs@6.11.0: - dependencies: - side-channel: 1.0.4 - - qs@6.5.3: {} - - query-string@5.1.1: - dependencies: - decode-uri-component: 0.2.2 - object-assign: 4.1.1 - strict-uri-encode: 1.1.0 - querystring@0.2.0: {} queue-microtask@1.2.3: {} @@ -13427,15 +11913,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - range-parser@1.2.1: {} - - raw-body@2.5.2: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.0 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - react-is@16.13.1: {} react-is@18.2.0: {} @@ -13513,6 +11990,10 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + rechoir@0.6.2: dependencies: resolve: 1.22.2 @@ -13586,29 +12067,6 @@ snapshots: replace-ext@1.0.1: {} - request@2.88.2: - dependencies: - aws-sign2: 0.7.0 - aws4: 1.12.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.3 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - require-directory@2.1.1: {} require-main-filename@2.0.0: {} @@ -13660,15 +12118,6 @@ snapshots: dependencies: glob: 7.2.3 - ripemd160@2.0.2: - dependencies: - hash-base: 3.1.0 - inherits: 2.0.4 - - rlp@2.2.7: - dependencies: - bn.js: 5.2.1 - run-applescript@5.0.0: dependencies: execa: 5.1.1 @@ -13707,14 +12156,6 @@ snapshots: scoped-regex@2.1.0: {} - scrypt-js@3.0.1: {} - - secp256k1@4.0.3: - dependencies: - elliptic: 6.5.5 - node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 - semver@5.5.0: {} semver@5.7.1: {} @@ -13733,62 +12174,20 @@ snapshots: dependencies: lru-cache: 6.0.0 - send@0.18.0: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.0 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.1 - transitivePeerDependencies: - - supports-color - serialize-javascript@5.0.1: dependencies: randombytes: 2.1.0 - serve-static@1.15.0: + serialize-javascript@6.0.2: dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.18.0 - transitivePeerDependencies: - - supports-color - - servify@0.1.12: - dependencies: - body-parser: 1.20.2 - cors: 2.8.5 - express: 4.19.2 - request: 2.88.2 - xhr: 2.6.0 - transitivePeerDependencies: - - supports-color + randombytes: 2.1.0 set-blocking@2.0.0: {} - setimmediate@1.0.5: {} - - setprototypeof@1.2.0: {} - sh-syntax@0.3.7: dependencies: tslib: 2.6.0 - sha.js@2.4.11: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 @@ -13840,14 +12239,6 @@ snapshots: transitivePeerDependencies: - supports-color - simple-concat@1.0.1: {} - - simple-get@2.8.2: - dependencies: - decompress-response: 3.3.0 - once: 1.4.0 - simple-concat: 1.0.1 - sisteransi@1.0.5: {} slash@3.0.0: {} @@ -13892,6 +12283,18 @@ snapshots: ip: 2.0.0 smart-buffer: 4.2.0 + solc@0.8.27: + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.9 + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.1 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + sort-keys@4.2.0: dependencies: is-plain-obj: 2.1.0 @@ -13926,18 +12329,6 @@ snapshots: sprintf-js@1.0.3: {} - sshpk@1.18.0: - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - ssri@10.0.4: dependencies: minipass: 5.0.0 @@ -13954,8 +12345,6 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 - statuses@2.0.1: {} - stdout-stderr@0.1.13: dependencies: debug: 4.3.4(supports-color@8.1.1) @@ -13967,8 +12356,6 @@ snapshots: dependencies: mixme: 0.5.9 - strict-uri-encode@1.1.0: {} - string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -14066,10 +12453,6 @@ snapshots: strip-final-newline@3.0.0: {} - strip-hex-prefix@1.0.0: - dependencies: - is-hex-prefixed: 1.0.0 - strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -14097,24 +12480,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swarm-js@0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10): - dependencies: - bluebird: 3.7.2 - buffer: 5.7.1 - eth-lib: 0.1.29(bufferutil@4.0.8)(utf-8-validate@5.0.10) - fs-extra: 4.0.3 - got: 11.8.6 - mime-types: 2.1.35 - mkdirp-promise: 5.0.1 - mock-fs: 4.14.0 - setimmediate: 1.0.5 - tar: 4.4.19 - xhr-request: 1.1.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - synckit@0.8.5: dependencies: '@pkgr/utils': 2.4.1 @@ -14122,16 +12487,6 @@ snapshots: tapable@2.2.1: {} - tar@4.4.19: - dependencies: - chownr: 1.1.4 - fs-minipass: 1.2.7 - minipass: 2.9.0 - minizlib: 1.3.3 - mkdirp: 0.5.6 - safe-buffer: 5.2.1 - yallist: 3.1.1 - tar@6.1.15: dependencies: chownr: 2.0.0 @@ -14155,8 +12510,6 @@ snapshots: through@2.3.8: {} - timed-out@4.0.1: {} - titleize@3.0.0: {} tmp@0.0.33: @@ -14176,13 +12529,6 @@ snapshots: is-buffer: 2.0.5 vfile: 5.3.7 - toidentifier@1.0.1: {} - - tough-cookie@2.5.0: - dependencies: - psl: 1.9.0 - punycode: 2.3.0 - tr46@0.0.3: {} tree-kill@1.2.2: {} @@ -14249,8 +12595,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - tweetnacl@0.14.5: {} - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -14269,23 +12613,12 @@ snapshots: type-fest@0.8.1: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - type@2.7.2: {} - typed-array-length@1.0.4: dependencies: call-bind: 1.0.2 for-each: 0.3.3 is-typed-array: 1.1.10 - typedarray-to-buffer@3.1.5: - dependencies: - is-typedarray: 1.0.0 - typedarray@0.0.6: {} typedoc@0.25.13(typescript@5.1.6): @@ -14304,8 +12637,6 @@ snapshots: typescript@5.1.6: {} - ultron@1.1.1: {} - unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 @@ -14427,8 +12758,6 @@ snapshots: universalify@2.0.0: {} - unpipe@1.0.0: {} - untildify@4.0.0: {} update-browserslist-db@1.0.11(browserslist@4.21.9): @@ -14441,19 +12770,11 @@ snapshots: dependencies: punycode: 2.3.0 - url-set-query@1.0.0: {} - url@0.10.3: dependencies: punycode: 1.3.2 querystring: 0.2.0 - utf-8-validate@5.0.10: - dependencies: - node-gyp-build: 4.8.0 - - utf8@3.0.0: {} - util-deprecate@1.0.2: {} util@0.12.5: @@ -14464,14 +12785,8 @@ snapshots: is-typed-array: 1.1.10 which-typed-array: 1.1.9 - utils-merge@1.0.1: {} - - uuid@3.4.0: {} - uuid@8.0.0: {} - uuid@9.0.1: {} - uvu@0.5.6: dependencies: dequal: 2.0.3 @@ -14500,16 +12815,6 @@ snapshots: dependencies: builtins: 5.0.1 - varint@5.0.2: {} - - vary@1.1.2: {} - - verror@1.10.0: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - vfile-message@3.1.4: dependencies: '@types/unist': 2.0.6 @@ -14576,192 +12881,10 @@ snapshots: dependencies: defaults: 1.0.4 - web3-bzz@1.9.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): - dependencies: - '@types/node': 12.20.55 - got: 12.1.0 - swarm-js: 0.1.42(bufferutil@4.0.8)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - web3-core-helpers@1.9.0: - dependencies: - web3-eth-iban: 1.9.0 - web3-utils: 1.9.0 - - web3-core-method@1.9.0: - dependencies: - '@ethersproject/transactions': 5.7.0 - web3-core-helpers: 1.9.0 - web3-core-promievent: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-utils: 1.9.0 - - web3-core-promievent@1.9.0: - dependencies: - eventemitter3: 4.0.4 - - web3-core-requestmanager@1.9.0(encoding@0.1.13): - dependencies: - util: 0.12.5 - web3-core-helpers: 1.9.0 - web3-providers-http: 1.9.0(encoding@0.1.13) - web3-providers-ipc: 1.9.0 - web3-providers-ws: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-core-subscriptions@1.9.0: - dependencies: - eventemitter3: 4.0.4 - web3-core-helpers: 1.9.0 - - web3-core@1.9.0(encoding@0.1.13): - dependencies: - '@types/bn.js': 5.1.5 - '@types/node': 12.20.55 - bignumber.js: 9.1.2 - web3-core-helpers: 1.9.0 - web3-core-method: 1.9.0 - web3-core-requestmanager: 1.9.0(encoding@0.1.13) - web3-utils: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-eth-abi@1.9.0: - dependencies: - '@ethersproject/abi': 5.7.0 - web3-utils: 1.9.0 - - web3-eth-accounts@1.9.0(encoding@0.1.13): - dependencies: - '@ethereumjs/common': 2.5.0 - '@ethereumjs/tx': 3.3.2 - eth-lib: 0.2.8 - ethereumjs-util: 7.1.5 - scrypt-js: 3.0.1 - uuid: 9.0.1 - web3-core: 1.9.0(encoding@0.1.13) - web3-core-helpers: 1.9.0 - web3-core-method: 1.9.0 - web3-utils: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-eth-contract@1.9.0(encoding@0.1.13): - dependencies: - '@types/bn.js': 5.1.5 - web3-core: 1.9.0(encoding@0.1.13) - web3-core-helpers: 1.9.0 - web3-core-method: 1.9.0 - web3-core-promievent: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-eth-abi: 1.9.0 - web3-utils: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-eth-ens@1.9.0(encoding@0.1.13): - dependencies: - content-hash: 2.5.2 - eth-ens-namehash: 2.0.8 - web3-core: 1.9.0(encoding@0.1.13) - web3-core-helpers: 1.9.0 - web3-core-promievent: 1.9.0 - web3-eth-abi: 1.9.0 - web3-eth-contract: 1.9.0(encoding@0.1.13) - web3-utils: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-eth-iban@1.9.0: - dependencies: - bn.js: 5.2.1 - web3-utils: 1.9.0 - - web3-eth-personal@1.9.0(encoding@0.1.13): - dependencies: - '@types/node': 12.20.55 - web3-core: 1.9.0(encoding@0.1.13) - web3-core-helpers: 1.9.0 - web3-core-method: 1.9.0 - web3-net: 1.9.0(encoding@0.1.13) - web3-utils: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-net@1.9.0(encoding@0.1.13): - dependencies: - web3-core: 1.9.0(encoding@0.1.13) - web3-core-method: 1.9.0 - web3-utils: 1.9.0 - transitivePeerDependencies: - - encoding - - supports-color - - web3-providers-http@1.9.0(encoding@0.1.13): - dependencies: - abortcontroller-polyfill: 1.7.5 - cross-fetch: 3.1.8(encoding@0.1.13) - es6-promise: 4.2.8 - web3-core-helpers: 1.9.0 - transitivePeerDependencies: - - encoding - - web3-providers-ipc@1.9.0: - dependencies: - oboe: 2.1.5 - web3-core-helpers: 1.9.0 - - web3-providers-ws@1.9.0: - dependencies: - eventemitter3: 4.0.4 - web3-core-helpers: 1.9.0 - websocket: 1.0.34 - transitivePeerDependencies: - - supports-color - - web3-shh@1.9.0(encoding@0.1.13): - dependencies: - web3-core: 1.9.0(encoding@0.1.13) - web3-core-method: 1.9.0 - web3-core-subscriptions: 1.9.0 - web3-net: 1.9.0(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - web3-utils@1.9.0: - dependencies: - bn.js: 5.2.1 - ethereum-bloom-filters: 1.1.0 - ethereumjs-util: 7.1.5 - ethjs-unit: 0.1.6 - number-to-bn: 1.7.0 - randombytes: 2.1.0 - utf8: 3.0.0 + web-streams-polyfill@3.3.3: {} webidl-conversions@3.0.1: {} - websocket@1.0.34: - dependencies: - bufferutil: 4.0.8 - debug: 2.6.9 - es5-ext: 0.10.64 - typedarray-to-buffer: 3.1.5 - utf-8-validate: 5.0.10 - yaeti: 0.0.6 - transitivePeerDependencies: - - supports-color - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -14821,6 +12944,8 @@ snapshots: workerpool@6.1.4: {} + workerpool@6.5.1: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -14846,36 +12971,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@3.3.3(bufferutil@4.0.8)(utf-8-validate@5.0.10): - dependencies: - async-limiter: 1.0.1 - safe-buffer: 5.1.2 - ultron: 1.1.1 - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - - xhr-request-promise@0.1.3: - dependencies: - xhr-request: 1.1.0 - - xhr-request@1.1.0: - dependencies: - buffer-to-arraybuffer: 0.0.5 - object-assign: 4.1.1 - query-string: 5.1.1 - simple-get: 2.8.2 - timed-out: 4.0.1 - url-set-query: 1.0.0 - xhr: 2.6.0 - - xhr@2.6.0: - dependencies: - global: 4.4.0 - is-function: 1.0.2 - parse-headers: 2.0.5 - xtend: 4.0.2 - xml2js@0.5.0: dependencies: sax: 1.2.1 @@ -14883,14 +12978,10 @@ snapshots: xmlbuilder@11.0.1: {} - xtend@4.0.2: {} - y18n@4.0.3: {} y18n@5.0.8: {} - yaeti@0.0.6: {} - yallist@2.1.2: {} yallist@3.1.1: {} @@ -14912,6 +13003,8 @@ snapshots: yargs-parser@20.2.4: {} + yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} yargs-unparser@2.0.0: From 2093ddd9c386005c206b261d76ba04d42f7947be Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 25 Nov 2024 17:08:51 +0800 Subject: [PATCH 14/17] test: hyperc20 contract and jit transfer --- packages/testcases/aspect/jit-transfer.ts | 159 + packages/testcases/contracts/HypERC20.sol | 4204 +++++++++++++++++ packages/testcases/contracts/erc20.sol | 554 +++ packages/testcases/package.json | 18 +- .../testcases/tests/testcases/hyper-test.json | 77 + .../tests/testcases/jit-transfer-test.json | 249 + .../testcases/tests/testcases/sources.json | 34 + 7 files changed, 5287 insertions(+), 8 deletions(-) create mode 100644 packages/testcases/aspect/jit-transfer.ts create mode 100644 packages/testcases/contracts/HypERC20.sol create mode 100644 packages/testcases/contracts/erc20.sol create mode 100644 packages/testcases/tests/testcases/hyper-test.json create mode 100644 packages/testcases/tests/testcases/jit-transfer-test.json diff --git a/packages/testcases/aspect/jit-transfer.ts b/packages/testcases/aspect/jit-transfer.ts new file mode 100644 index 0000000..988e889 --- /dev/null +++ b/packages/testcases/aspect/jit-transfer.ts @@ -0,0 +1,159 @@ +import { + allocate, + entryPoint, + execute, + BigInt, + BytesData, + ethereum, + hexToUint8Array, + IAspectOperation, + IPostContractCallJP, + JitCallBuilder, + OperationInput, + PostContractCallInput, + stringToUint8Array, + sys, + uint8ArrayToHex, + uint8ArrayToString, + InitInput, +} from "@artela/aspect-libs"; +import { Protobuf } from "as-proto/assembly/Protobuf"; + +/** + * There are two types of Aspect: Transaction-Level Aspect and Block-Level Aspect. + * Transaction-Level Aspect will be triggered whenever there is a transaction calling the bound smart contract. + * Block-Level Aspect will be triggered whenever there is a new block generated. + * + * An Aspect can be Transaction-Level, Block-Level,IAspectOperation or both. + * You can implement corresponding interfaces: IAspectTransaction, IAspectBlock,IAspectOperation or both to tell Artela which + * type of Aspect you are implementing. + */ +export class JITTransferAspect implements IPostContractCallJP, IAspectOperation { + + static readonly PAYER_KEY: string = 'PAYER_KEY'; + static readonly ENTRYPOINT_ADDRESS: string = '0x000000000000000000000000000000000000AAEC'; + static readonly TRANSFER_AMOUNT: u64 = 1; + + init(input: InitInput): void { } + + postContractCall(input: PostContractCallInput): void { + sys.log("_____postContractCall"); + let calldata = uint8ArrayToHex(input.call!.data); + let method = this.parseCallMethod(calldata); + + const payer = this.getPayer(); + const to = this.getTransferAddress(calldata); + const transferCalldata = ethereum.abiEncode('execute', [ + ethereum.Address.fromHexString(to), + ethereum.Number.fromU64(JITTransferAspect.TRANSFER_AMOUNT, 64), + ethereum.Bytes.fromHexString('0x') + ]); + + sys.log(`_____Joinpoint postContractCall, method: ${method}, payer: ${payer}, receiver: ${to}`); + // if method is 'transfer(address,uint256)' + if (method == "0xa9059cbb") { + sys.log(`_____submit jit call`); + let request = JitCallBuilder.simple( + hexToUint8Array(payer), + hexToUint8Array(JITTransferAspect.ENTRYPOINT_ADDRESS), + hexToUint8Array(transferCalldata) + ).build(); + + let response = sys.hostApi.evmCall.jitCall(request); + if (!response.success) { + sys.log(`_____Failed to submit the JIT call, err: ${response.errorMsg}, ret: ${uint8ArrayToString(response.ret)}`); + } else { + sys.log(`_____Successfully submitted the JIT call, ret: ${uint8ArrayToString(response.ret)}`); + } + } + } + + operation(input: OperationInput): Uint8Array { + const calldata = uint8ArrayToHex(input.callData); + const op = this.parseOP(calldata); + const params = this.parseOPPrams(calldata); + + if (op == "0001") { + this.registerPayer(params); + return new Uint8Array(0); + } + if (op == "1001") { + let ret = this.getPayer(); + return stringToUint8Array(ret); + } + + sys.revert("unknown op"); + return new Uint8Array(0); + } + + parseCallMethod(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(0, 10); + } + return '0x' + calldata.substring(0, 8); + } + + getTransferAddress(calldata: string): string { + if (calldata.startsWith('0x')) { + return '0x' + calldata.slice(34, 74); + } + return '0x' + calldata.slice(32, 72); + } + + parseOP(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(2, 6); + } else { + return calldata.substring(0, 4); + } + } + + parseOPPrams(calldata: string): string { + if (calldata.startsWith('0x')) { + return calldata.substring(6, calldata.length); + } else { + return calldata.substring(4, calldata.length); + } + } + + rmPrefix(data: string): string { + if (data.startsWith('0x')) { + return data.substring(2, data.length); + } else { + return data; + } + } + + registerPayer(params: string): void { + this.savePayer(params, JITTransferAspect.PAYER_KEY); + } + + savePayer(params: string, storagePrefix: string): void { + sys.require(params.length == 40, "illegal params"); + const payer = params.slice(0, 40); + + let payerStore = sys.aspect.mutableState.get(storagePrefix); + payerStore.set(hexToUint8Array(payer)); + } + + getPayer(): string { + let payerStore = sys.aspect.mutableState.get(JITTransferAspect.PAYER_KEY); + return uint8ArrayToHex(payerStore.unwrap()); + } + + //**************************** + // unused methods + //**************************** + + isOwner(sender: Uint8Array): bool { + return false; + } +} + +// 2.register aspect Instance +const aspect = new JITTransferAspect() +entryPoint.setAspect(aspect) +entryPoint.setOperationAspect(aspect) + +// 3.must export it +export { execute, allocate } \ No newline at end of file diff --git a/packages/testcases/contracts/HypERC20.sol b/packages/testcases/contracts/HypERC20.sol new file mode 100644 index 0000000..b7168f3 --- /dev/null +++ b/packages/testcases/contracts/HypERC20.sol @@ -0,0 +1,4204 @@ + + +// Sources flattened with hardhat v2.22.2 https://hardhat.org + +// SPDX-License-Identifier: Apache-2.0 AND MIT + +// File @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) + +pragma solidity ^0.8.1; + +/** + * @dev Collection of functions related to the address type + */ +library AddressUpgradeable { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * + * Furthermore, `isContract` will also return true if the target contract within + * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, + * which only has an effect at the end of a transaction. + * ==== + * + * [IMPORTANT] + * ==== + * You shouldn't rely on `isContract` to protect against flash loan attacks! + * + * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets + * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract + * constructor. + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize/address.code.length, which returns 0 + // for contracts in construction, since the code is only stored at the end + // of the constructor execution. + + return account.code.length > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + (bool success, ) = recipient.call{value: amount}(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value, + string memory errorMessage + ) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall( + address target, + bytes memory data, + string memory errorMessage + ) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + return functionDelegateCall(target, data, "Address: low-level delegate call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling + * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. + * + * _Available since v4.8._ + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata, + string memory errorMessage + ) internal view returns (bytes memory) { + if (success) { + if (returndata.length == 0) { + // only check isContract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + require(isContract(target), "Address: call to non-contract"); + } + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + /** + * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the + * revert reason or using the provided one. + * + * _Available since v4.3._ + */ + function verifyCallResult( + bool success, + bytes memory returndata, + string memory errorMessage + ) internal pure returns (bytes memory) { + if (success) { + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + function _revert(bytes memory returndata, string memory errorMessage) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } +} + + +// File @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol) + +pragma solidity ^0.8.2; + +/** + * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed + * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an + * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer + * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. + * + * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be + * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in + * case an upgrade adds a module that needs to be initialized. + * + * For example: + * + * [.hljs-theme-light.nopadding] + * ```solidity + * contract MyToken is ERC20Upgradeable { + * function initialize() initializer public { + * __ERC20_init("MyToken", "MTK"); + * } + * } + * + * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { + * function initializeV2() reinitializer(2) public { + * __ERC20Permit_init("MyToken"); + * } + * } + * ``` + * + * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as + * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. + * + * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure + * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. + * + * [CAUTION] + * ==== + * Avoid leaving a contract uninitialized. + * + * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation + * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke + * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: + * + * [.hljs-theme-light.nopadding] + * ``` + * /// @custom:oz-upgrades-unsafe-allow constructor + * constructor() { + * _disableInitializers(); + * } + * ``` + * ==== + */ +abstract contract Initializable { + /** + * @dev Indicates that the contract has been initialized. + * @custom:oz-retyped-from bool + */ + uint8 private _initialized; + + /** + * @dev Indicates that the contract is in the process of being initialized. + */ + bool private _initializing; + + /** + * @dev Triggered when the contract has been initialized or reinitialized. + */ + event Initialized(uint8 version); + + /** + * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, + * `onlyInitializing` functions can be used to initialize parent contracts. + * + * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a + * constructor. + * + * Emits an {Initialized} event. + */ + modifier initializer() { + bool isTopLevelCall = !_initializing; + require( + (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), + "Initializable: contract is already initialized" + ); + _initialized = 1; + if (isTopLevelCall) { + _initializing = true; + } + _; + if (isTopLevelCall) { + _initializing = false; + emit Initialized(1); + } + } + + /** + * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the + * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be + * used to initialize parent contracts. + * + * A reinitializer may be used after the original initialization step. This is essential to configure modules that + * are added through upgrades and that require initialization. + * + * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` + * cannot be nested. If one is invoked in the context of another, execution will revert. + * + * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in + * a contract, executing them in the right order is up to the developer or operator. + * + * WARNING: setting the version to 255 will prevent any future reinitialization. + * + * Emits an {Initialized} event. + */ + modifier reinitializer(uint8 version) { + require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); + _initialized = version; + _initializing = true; + _; + _initializing = false; + emit Initialized(version); + } + + /** + * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the + * {initializer} and {reinitializer} modifiers, directly or indirectly. + */ + modifier onlyInitializing() { + require(_initializing, "Initializable: contract is not initializing"); + _; + } + + /** + * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. + * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized + * to any version. It is recommended to use this to lock implementation contracts that are designed to be called + * through proxies. + * + * Emits an {Initialized} event the first time it is successfully executed. + */ + function _disableInitializers() internal virtual { + require(!_initializing, "Initializable: contract is initializing"); + if (_initialized != type(uint8).max) { + _initialized = type(uint8).max; + emit Initialized(type(uint8).max); + } + } + + /** + * @dev Returns the highest version that has been initialized. See {reinitializer}. + */ + function _getInitializedVersion() internal view returns (uint8) { + return _initialized; + } + + /** + * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. + */ + function _isInitializing() internal view returns (bool) { + return _initializing; + } +} + + +// File @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract ContextUpgradeable is Initializable { + function __Context_init() internal onlyInitializing { + } + + function __Context_init_unchained() internal onlyInitializing { + } + function _msgSender() internal view virtual returns (address) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes calldata) { + return msg.data; + } + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[50] private __gap; +} + + +// File @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) + +pragma solidity ^0.8.0; + + +/** + * @dev Contract module which provides a basic access control mechanism, where + * there is an account (an owner) that can be granted exclusive access to + * specific functions. + * + * By default, the owner account will be the one that deploys the contract. This + * can later be changed with {transferOwnership}. + * + * This module is used through inheritance. It will make available the modifier + * `onlyOwner`, which can be applied to your functions to restrict their use to + * the owner. + */ +abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { + address private _owner; + + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + + /** + * @dev Initializes the contract setting the deployer as the initial owner. + */ + function __Ownable_init() internal onlyInitializing { + __Ownable_init_unchained(); + } + + function __Ownable_init_unchained() internal onlyInitializing { + _transferOwnership(_msgSender()); + } + + /** + * @dev Throws if called by any account other than the owner. + */ + modifier onlyOwner() { + _checkOwner(); + _; + } + + /** + * @dev Returns the address of the current owner. + */ + function owner() public view virtual returns (address) { + return _owner; + } + + /** + * @dev Throws if the sender is not the owner. + */ + function _checkOwner() internal view virtual { + require(owner() == _msgSender(), "Ownable: caller is not the owner"); + } + + /** + * @dev Leaves the contract without owner. It will not be possible to call + * `onlyOwner` functions. Can only be called by the current owner. + * + * NOTE: Renouncing ownership will leave the contract without an owner, + * thereby disabling any functionality that is only available to the owner. + */ + function renounceOwnership() public virtual onlyOwner { + _transferOwnership(address(0)); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`). + * Can only be called by the current owner. + */ + function transferOwnership(address newOwner) public virtual onlyOwner { + require(newOwner != address(0), "Ownable: new owner is the zero address"); + _transferOwnership(newOwner); + } + + /** + * @dev Transfers ownership of the contract to a new account (`newOwner`). + * Internal function without access restriction. + */ + function _transferOwnership(address newOwner) internal virtual { + address oldOwner = _owner; + _owner = newOwner; + emit OwnershipTransferred(oldOwner, newOwner); + } + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[49] private __gap; +} + + +// File @openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20Upgradeable { + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); + + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `to`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address to, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `from` to `to` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom(address from, address to, uint256 amount) external returns (bool); +} + + +// File @openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Interface for the optional metadata functions from the ERC20 standard. + * + * _Available since v4.1._ + */ +interface IERC20MetadataUpgradeable is IERC20Upgradeable { + /** + * @dev Returns the name of the token. + */ + function name() external view returns (string memory); + + /** + * @dev Returns the symbol of the token. + */ + function symbol() external view returns (string memory); + + /** + * @dev Returns the decimals places of the token. + */ + function decimals() external view returns (uint8); +} + + +// File @openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) + +pragma solidity ^0.8.0; + + + + +/** + * @dev Implementation of the {IERC20} interface. + * + * This implementation is agnostic to the way tokens are created. This means + * that a supply mechanism has to be added in a derived contract using {_mint}. + * For a generic mechanism see {ERC20PresetMinterPauser}. + * + * TIP: For a detailed writeup see our guide + * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How + * to implement supply mechanisms]. + * + * The default value of {decimals} is 18. To change this, you should override + * this function so it returns a different value. + * + * We have followed general OpenZeppelin Contracts guidelines: functions revert + * instead returning `false` on failure. This behavior is nonetheless + * conventional and does not conflict with the expectations of ERC20 + * applications. + * + * Additionally, an {Approval} event is emitted on calls to {transferFrom}. + * This allows applications to reconstruct the allowance for all accounts just + * by listening to said events. Other implementations of the EIP may not emit + * these events, as it isn't required by the specification. + * + * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} + * functions have been added to mitigate the well-known issues around setting + * allowances. See {IERC20-approve}. + */ +contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable { + mapping(address => uint256) private _balances; + + mapping(address => mapping(address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + + /** + * @dev Sets the values for {name} and {symbol}. + * + * All two of these values are immutable: they can only be set once during + * construction. + */ + function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing { + __ERC20_init_unchained(name_, symbol_); + } + + function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing { + _name = name_; + _symbol = symbol_; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual override returns (string memory) { + return _name; + } + + /** + * @dev Returns the symbol of the token, usually a shorter version of the + * name. + */ + function symbol() public view virtual override returns (string memory) { + return _symbol; + } + + /** + * @dev Returns the number of decimals used to get its user representation. + * For example, if `decimals` equals `2`, a balance of `505` tokens should + * be displayed to a user as `5.05` (`505 / 10 ** 2`). + * + * Tokens usually opt for a value of 18, imitating the relationship between + * Ether and Wei. This is the default value returned by this function, unless + * it's overridden. + * + * NOTE: This information is only used for _display_ purposes: it in + * no way affects any of the arithmetic of the contract, including + * {IERC20-balanceOf} and {IERC20-transfer}. + */ + function decimals() public view virtual override returns (uint8) { + return 18; + } + + /** + * @dev See {IERC20-totalSupply}. + */ + function totalSupply() public view virtual override returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual override returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer(address to, uint256 amount) public virtual override returns (bool) { + address owner = _msgSender(); + _transfer(owner, to, amount); + return true; + } + + /** + * @dev See {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } + + /** + * @dev See {IERC20-approve}. + * + * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on + * `transferFrom`. This is semantically equivalent to an infinite approval. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, amount); + return true; + } + + /** + * @dev See {IERC20-transferFrom}. + * + * Emits an {Approval} event indicating the updated allowance. This is not + * required by the EIP. See the note at the beginning of {ERC20}. + * + * NOTE: Does not update the allowance if the current allowance + * is the maximum `uint256`. + * + * Requirements: + * + * - `from` and `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + * - the caller must have allowance for ``from``'s tokens of at least + * `amount`. + */ + function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) { + address spender = _msgSender(); + _spendAllowance(from, spender, amount); + _transfer(from, to, amount); + return true; + } + + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, allowance(owner, spender) + addedValue); + return true; + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + address owner = _msgSender(); + uint256 currentAllowance = allowance(owner, spender); + require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); + unchecked { + _approve(owner, spender, currentAllowance - subtractedValue); + } + + return true; + } + + /** + * @dev Moves `amount` of tokens from `from` to `to`. + * + * This internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + */ + function _transfer(address from, address to, uint256 amount) internal virtual { + require(from != address(0), "ERC20: transfer from the zero address"); + require(to != address(0), "ERC20: transfer to the zero address"); + + _beforeTokenTransfer(from, to, amount); + + uint256 fromBalance = _balances[from]; + require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); + unchecked { + _balances[from] = fromBalance - amount; + // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by + // decrementing then incrementing. + _balances[to] += amount; + } + + emit Transfer(from, to, amount); + + _afterTokenTransfer(from, to, amount); + } + + /** @dev Creates `amount` tokens and assigns them to `account`, increasing + * the total supply. + * + * Emits a {Transfer} event with `from` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + + _beforeTokenTransfer(address(0), account, amount); + + _totalSupply += amount; + unchecked { + // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. + _balances[account] += amount; + } + emit Transfer(address(0), account, amount); + + _afterTokenTransfer(address(0), account, amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, reducing the + * total supply. + * + * Emits a {Transfer} event with `to` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + * - `account` must have at least `amount` tokens. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + uint256 accountBalance = _balances[account]; + require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); + unchecked { + _balances[account] = accountBalance - amount; + // Overflow not possible: amount <= accountBalance <= totalSupply. + _totalSupply -= amount; + } + + emit Transfer(account, address(0), amount); + + _afterTokenTransfer(account, address(0), amount); + } + + /** + * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. + * + * This internal function is equivalent to `approve`, and can be used to + * e.g. set automatic allowances for certain subsystems, etc. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `owner` cannot be the zero address. + * - `spender` cannot be the zero address. + */ + function _approve(address owner, address spender, uint256 amount) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + /** + * @dev Updates `owner` s allowance for `spender` based on spent `amount`. + * + * Does not update the allowance amount in case of infinite allowance. + * Revert if not enough allowance is available. + * + * Might emit an {Approval} event. + */ + function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { + uint256 currentAllowance = allowance(owner, spender); + if (currentAllowance != type(uint256).max) { + require(currentAllowance >= amount, "ERC20: insufficient allowance"); + unchecked { + _approve(owner, spender, currentAllowance - amount); + } + } + } + + /** + * @dev Hook that is called before any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * will be transferred to `to`. + * - when `from` is zero, `amount` tokens will be minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} + + /** + * @dev Hook that is called after any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * has been transferred to `to`. + * - when `from` is zero, `amount` tokens have been minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens have been burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} + + /** + * @dev This empty reserved space is put in place to allow future versions to add new + * variables without shifting down storage in the inheritance chain. + * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + */ + uint256[45] private __gap; +} + + +// File @openzeppelin/contracts/utils/math/Math.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Standard math utilities missing in the Solidity language. + */ +library Math { + enum Rounding { + Down, // Toward negative infinity + Up, // Toward infinity + Zero // Toward zero + } + + /** + * @dev Returns the largest of two numbers. + */ + function max(uint256 a, uint256 b) internal pure returns (uint256) { + return a > b ? a : b; + } + + /** + * @dev Returns the smallest of two numbers. + */ + function min(uint256 a, uint256 b) internal pure returns (uint256) { + return a < b ? a : b; + } + + /** + * @dev Returns the average of two numbers. The result is rounded towards + * zero. + */ + function average(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b) / 2 can overflow. + return (a & b) + (a ^ b) / 2; + } + + /** + * @dev Returns the ceiling of the division of two numbers. + * + * This differs from standard division with `/` in that it rounds up instead + * of rounding down. + */ + function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { + // (a + b - 1) / b can overflow on addition, so we distribute. + return a == 0 ? 0 : (a - 1) / b + 1; + } + + /** + * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 + * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) + * with further edits by Uniswap Labs also under MIT license. + */ + function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { + unchecked { + // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use + // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 + // variables such that product = prod1 * 2^256 + prod0. + uint256 prod0; // Least significant 256 bits of the product + uint256 prod1; // Most significant 256 bits of the product + assembly { + let mm := mulmod(x, y, not(0)) + prod0 := mul(x, y) + prod1 := sub(sub(mm, prod0), lt(mm, prod0)) + } + + // Handle non-overflow cases, 256 by 256 division. + if (prod1 == 0) { + // Solidity will revert if denominator == 0, unlike the div opcode on its own. + // The surrounding unchecked block does not change this fact. + // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. + return prod0 / denominator; + } + + // Make sure the result is less than 2^256. Also prevents denominator == 0. + require(denominator > prod1, "Math: mulDiv overflow"); + + /////////////////////////////////////////////// + // 512 by 256 division. + /////////////////////////////////////////////// + + // Make division exact by subtracting the remainder from [prod1 prod0]. + uint256 remainder; + assembly { + // Compute remainder using mulmod. + remainder := mulmod(x, y, denominator) + + // Subtract 256 bit number from 512 bit number. + prod1 := sub(prod1, gt(remainder, prod0)) + prod0 := sub(prod0, remainder) + } + + // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. + // See https://cs.stackexchange.com/q/138556/92363. + + // Does not overflow because the denominator cannot be zero at this stage in the function. + uint256 twos = denominator & (~denominator + 1); + assembly { + // Divide denominator by twos. + denominator := div(denominator, twos) + + // Divide [prod1 prod0] by twos. + prod0 := div(prod0, twos) + + // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. + twos := add(div(sub(0, twos), twos), 1) + } + + // Shift in bits from prod1 into prod0. + prod0 |= prod1 * twos; + + // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such + // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for + // four bits. That is, denominator * inv = 1 mod 2^4. + uint256 inverse = (3 * denominator) ^ 2; + + // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works + // in modular arithmetic, doubling the correct bits in each step. + inverse *= 2 - denominator * inverse; // inverse mod 2^8 + inverse *= 2 - denominator * inverse; // inverse mod 2^16 + inverse *= 2 - denominator * inverse; // inverse mod 2^32 + inverse *= 2 - denominator * inverse; // inverse mod 2^64 + inverse *= 2 - denominator * inverse; // inverse mod 2^128 + inverse *= 2 - denominator * inverse; // inverse mod 2^256 + + // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. + // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is + // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 + // is no longer required. + result = prod0 * inverse; + return result; + } + } + + /** + * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. + */ + function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { + uint256 result = mulDiv(x, y, denominator); + if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { + result += 1; + } + return result; + } + + /** + * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. + * + * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). + */ + function sqrt(uint256 a) internal pure returns (uint256) { + if (a == 0) { + return 0; + } + + // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. + // + // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have + // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. + // + // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` + // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` + // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` + // + // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. + uint256 result = 1 << (log2(a) >> 1); + + // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, + // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at + // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision + // into the expected uint128 result. + unchecked { + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + result = (result + a / result) >> 1; + return min(result, a / result); + } + } + + /** + * @notice Calculates sqrt(a), following the selected rounding direction. + */ + function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = sqrt(a); + return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); + } + } + + /** + * @dev Return the log in base 2, rounded down, of a positive value. + * Returns 0 if given 0. + */ + function log2(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >> 128 > 0) { + value >>= 128; + result += 128; + } + if (value >> 64 > 0) { + value >>= 64; + result += 64; + } + if (value >> 32 > 0) { + value >>= 32; + result += 32; + } + if (value >> 16 > 0) { + value >>= 16; + result += 16; + } + if (value >> 8 > 0) { + value >>= 8; + result += 8; + } + if (value >> 4 > 0) { + value >>= 4; + result += 4; + } + if (value >> 2 > 0) { + value >>= 2; + result += 2; + } + if (value >> 1 > 0) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 2, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log2(value); + return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); + } + } + + /** + * @dev Return the log in base 10, rounded down, of a positive value. + * Returns 0 if given 0. + */ + function log10(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >= 10 ** 64) { + value /= 10 ** 64; + result += 64; + } + if (value >= 10 ** 32) { + value /= 10 ** 32; + result += 32; + } + if (value >= 10 ** 16) { + value /= 10 ** 16; + result += 16; + } + if (value >= 10 ** 8) { + value /= 10 ** 8; + result += 8; + } + if (value >= 10 ** 4) { + value /= 10 ** 4; + result += 4; + } + if (value >= 10 ** 2) { + value /= 10 ** 2; + result += 2; + } + if (value >= 10 ** 1) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 10, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log10(value); + return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); + } + } + + /** + * @dev Return the log in base 256, rounded down, of a positive value. + * Returns 0 if given 0. + * + * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. + */ + function log256(uint256 value) internal pure returns (uint256) { + uint256 result = 0; + unchecked { + if (value >> 128 > 0) { + value >>= 128; + result += 16; + } + if (value >> 64 > 0) { + value >>= 64; + result += 8; + } + if (value >> 32 > 0) { + value >>= 32; + result += 4; + } + if (value >> 16 > 0) { + value >>= 16; + result += 2; + } + if (value >> 8 > 0) { + result += 1; + } + } + return result; + } + + /** + * @dev Return the log in base 256, following the selected rounding direction, of a positive value. + * Returns 0 if given 0. + */ + function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { + unchecked { + uint256 result = log256(value); + return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); + } + } +} + + +// File @openzeppelin/contracts/utils/math/SignedMath.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Standard signed math utilities missing in the Solidity language. + */ +library SignedMath { + /** + * @dev Returns the largest of two signed numbers. + */ + function max(int256 a, int256 b) internal pure returns (int256) { + return a > b ? a : b; + } + + /** + * @dev Returns the smallest of two signed numbers. + */ + function min(int256 a, int256 b) internal pure returns (int256) { + return a < b ? a : b; + } + + /** + * @dev Returns the average of two signed numbers without overflow. + * The result is rounded towards zero. + */ + function average(int256 a, int256 b) internal pure returns (int256) { + // Formula from the book "Hacker's Delight" + int256 x = (a & b) + ((a ^ b) >> 1); + return x + (int256(uint256(x) >> 255) & (a ^ b)); + } + + /** + * @dev Returns the absolute unsigned value of a signed value. + */ + function abs(int256 n) internal pure returns (uint256) { + unchecked { + // must be unchecked in order to support `n = type(int256).min` + return uint256(n >= 0 ? n : -n); + } + } +} + + +// File @openzeppelin/contracts/utils/Strings.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) + +pragma solidity ^0.8.0; + + +/** + * @dev String operations. + */ +library Strings { + bytes16 private constant _SYMBOLS = "0123456789abcdef"; + uint8 private constant _ADDRESS_LENGTH = 20; + + /** + * @dev Converts a `uint256` to its ASCII `string` decimal representation. + */ + function toString(uint256 value) internal pure returns (string memory) { + unchecked { + uint256 length = Math.log10(value) + 1; + string memory buffer = new string(length); + uint256 ptr; + /// @solidity memory-safe-assembly + assembly { + ptr := add(buffer, add(32, length)) + } + while (true) { + ptr--; + /// @solidity memory-safe-assembly + assembly { + mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) + } + value /= 10; + if (value == 0) break; + } + return buffer; + } + } + + /** + * @dev Converts a `int256` to its ASCII `string` decimal representation. + */ + function toString(int256 value) internal pure returns (string memory) { + return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); + } + + /** + * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. + */ + function toHexString(uint256 value) internal pure returns (string memory) { + unchecked { + return toHexString(value, Math.log256(value) + 1); + } + } + + /** + * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. + */ + function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { + bytes memory buffer = new bytes(2 * length + 2); + buffer[0] = "0"; + buffer[1] = "x"; + for (uint256 i = 2 * length + 1; i > 1; --i) { + buffer[i] = _SYMBOLS[value & 0xf]; + value >>= 4; + } + require(value == 0, "Strings: hex length insufficient"); + return string(buffer); + } + + /** + * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. + */ + function toHexString(address addr) internal pure returns (string memory) { + return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); + } + + /** + * @dev Returns true if the two strings are equal. + */ + function equal(string memory a, string memory b) internal pure returns (bool) { + return keccak256(bytes(a)) == keccak256(bytes(b)); + } +} + + +// File @openzeppelin/contracts/utils/structs/EnumerableSet.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol) +// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js. + +pragma solidity ^0.8.0; + +/** + * @dev Library for managing + * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive + * types. + * + * Sets have the following properties: + * + * - Elements are added, removed, and checked for existence in constant time + * (O(1)). + * - Elements are enumerated in O(n). No guarantees are made on the ordering. + * + * ```solidity + * contract Example { + * // Add the library methods + * using EnumerableSet for EnumerableSet.AddressSet; + * + * // Declare a set state variable + * EnumerableSet.AddressSet private mySet; + * } + * ``` + * + * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) + * and `uint256` (`UintSet`) are supported. + * + * [WARNING] + * ==== + * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure + * unusable. + * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. + * + * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an + * array of EnumerableSet. + * ==== + */ +library EnumerableSet { + // To implement this library for multiple types with as little code + // repetition as possible, we write it in terms of a generic Set type with + // bytes32 values. + // The Set implementation uses private functions, and user-facing + // implementations (such as AddressSet) are just wrappers around the + // underlying Set. + // This means that we can only create new EnumerableSets for types that fit + // in bytes32. + + struct Set { + // Storage of set values + bytes32[] _values; + // Position of the value in the `values` array, plus 1 because index 0 + // means a value is not in the set. + mapping(bytes32 => uint256) _indexes; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function _add(Set storage set, bytes32 value) private returns (bool) { + if (!_contains(set, value)) { + set._values.push(value); + // The value is stored at length-1, but we add 1 to all indexes + // and use 0 as a sentinel value + set._indexes[value] = set._values.length; + return true; + } else { + return false; + } + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function _remove(Set storage set, bytes32 value) private returns (bool) { + // We read and store the value's index to prevent multiple reads from the same storage slot + uint256 valueIndex = set._indexes[value]; + + if (valueIndex != 0) { + // Equivalent to contains(set, value) + // To delete an element from the _values array in O(1), we swap the element to delete with the last one in + // the array, and then remove the last element (sometimes called as 'swap and pop'). + // This modifies the order of the array, as noted in {at}. + + uint256 toDeleteIndex = valueIndex - 1; + uint256 lastIndex = set._values.length - 1; + + if (lastIndex != toDeleteIndex) { + bytes32 lastValue = set._values[lastIndex]; + + // Move the last value to the index where the value to delete is + set._values[toDeleteIndex] = lastValue; + // Update the index for the moved value + set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex + } + + // Delete the slot where the moved value was stored + set._values.pop(); + + // Delete the index for the deleted slot + delete set._indexes[value]; + + return true; + } else { + return false; + } + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function _contains(Set storage set, bytes32 value) private view returns (bool) { + return set._indexes[value] != 0; + } + + /** + * @dev Returns the number of values on the set. O(1). + */ + function _length(Set storage set) private view returns (uint256) { + return set._values.length; + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function _at(Set storage set, uint256 index) private view returns (bytes32) { + return set._values[index]; + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function _values(Set storage set) private view returns (bytes32[] memory) { + return set._values; + } + + // Bytes32Set + + struct Bytes32Set { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { + return _add(set._inner, value); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { + return _remove(set._inner, value); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { + return _contains(set._inner, value); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(Bytes32Set storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { + return _at(set._inner, index); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { + bytes32[] memory store = _values(set._inner); + bytes32[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // AddressSet + + struct AddressSet { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(AddressSet storage set, address value) internal returns (bool) { + return _add(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(AddressSet storage set, address value) internal returns (bool) { + return _remove(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(AddressSet storage set, address value) internal view returns (bool) { + return _contains(set._inner, bytes32(uint256(uint160(value)))); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(AddressSet storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(AddressSet storage set, uint256 index) internal view returns (address) { + return address(uint160(uint256(_at(set._inner, index)))); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(AddressSet storage set) internal view returns (address[] memory) { + bytes32[] memory store = _values(set._inner); + address[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // UintSet + + struct UintSet { + Set _inner; + } + + /** + * @dev Add a value to a set. O(1). + * + * Returns true if the value was added to the set, that is if it was not + * already present. + */ + function add(UintSet storage set, uint256 value) internal returns (bool) { + return _add(set._inner, bytes32(value)); + } + + /** + * @dev Removes a value from a set. O(1). + * + * Returns true if the value was removed from the set, that is if it was + * present. + */ + function remove(UintSet storage set, uint256 value) internal returns (bool) { + return _remove(set._inner, bytes32(value)); + } + + /** + * @dev Returns true if the value is in the set. O(1). + */ + function contains(UintSet storage set, uint256 value) internal view returns (bool) { + return _contains(set._inner, bytes32(value)); + } + + /** + * @dev Returns the number of values in the set. O(1). + */ + function length(UintSet storage set) internal view returns (uint256) { + return _length(set._inner); + } + + /** + * @dev Returns the value stored at position `index` in the set. O(1). + * + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(UintSet storage set, uint256 index) internal view returns (uint256) { + return uint256(_at(set._inner, index)); + } + + /** + * @dev Return the entire set in an array + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function values(UintSet storage set) internal view returns (uint256[] memory) { + bytes32[] memory store = _values(set._inner); + uint256[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } +} + + +// File @openzeppelin/contracts/utils/structs/EnumerableMap.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableMap.sol) +// This file was procedurally generated from scripts/generate/templates/EnumerableMap.js. + +pragma solidity ^0.8.0; + +/** + * @dev Library for managing an enumerable variant of Solidity's + * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`] + * type. + * + * Maps have the following properties: + * + * - Entries are added, removed, and checked for existence in constant time + * (O(1)). + * - Entries are enumerated in O(n). No guarantees are made on the ordering. + * + * ```solidity + * contract Example { + * // Add the library methods + * using EnumerableMap for EnumerableMap.UintToAddressMap; + * + * // Declare a set state variable + * EnumerableMap.UintToAddressMap private myMap; + * } + * ``` + * + * The following map types are supported: + * + * - `uint256 -> address` (`UintToAddressMap`) since v3.0.0 + * - `address -> uint256` (`AddressToUintMap`) since v4.6.0 + * - `bytes32 -> bytes32` (`Bytes32ToBytes32Map`) since v4.6.0 + * - `uint256 -> uint256` (`UintToUintMap`) since v4.7.0 + * - `bytes32 -> uint256` (`Bytes32ToUintMap`) since v4.7.0 + * + * [WARNING] + * ==== + * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure + * unusable. + * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. + * + * In order to clean an EnumerableMap, you can either remove all elements one by one or create a fresh instance using an + * array of EnumerableMap. + * ==== + */ +library EnumerableMap { + using EnumerableSet for EnumerableSet.Bytes32Set; + + // To implement this library for multiple types with as little code + // repetition as possible, we write it in terms of a generic Map type with + // bytes32 keys and values. + // The Map implementation uses private functions, and user-facing + // implementations (such as Uint256ToAddressMap) are just wrappers around + // the underlying Map. + // This means that we can only create new EnumerableMaps for types that fit + // in bytes32. + + struct Bytes32ToBytes32Map { + // Storage of keys + EnumerableSet.Bytes32Set _keys; + mapping(bytes32 => bytes32) _values; + } + + /** + * @dev Adds a key-value pair to a map, or updates the value for an existing + * key. O(1). + * + * Returns true if the key was added to the map, that is if it was not + * already present. + */ + function set(Bytes32ToBytes32Map storage map, bytes32 key, bytes32 value) internal returns (bool) { + map._values[key] = value; + return map._keys.add(key); + } + + /** + * @dev Removes a key-value pair from a map. O(1). + * + * Returns true if the key was removed from the map, that is if it was present. + */ + function remove(Bytes32ToBytes32Map storage map, bytes32 key) internal returns (bool) { + delete map._values[key]; + return map._keys.remove(key); + } + + /** + * @dev Returns true if the key is in the map. O(1). + */ + function contains(Bytes32ToBytes32Map storage map, bytes32 key) internal view returns (bool) { + return map._keys.contains(key); + } + + /** + * @dev Returns the number of key-value pairs in the map. O(1). + */ + function length(Bytes32ToBytes32Map storage map) internal view returns (uint256) { + return map._keys.length(); + } + + /** + * @dev Returns the key-value pair stored at position `index` in the map. O(1). + * + * Note that there are no guarantees on the ordering of entries inside the + * array, and it may change when more entries are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(Bytes32ToBytes32Map storage map, uint256 index) internal view returns (bytes32, bytes32) { + bytes32 key = map._keys.at(index); + return (key, map._values[key]); + } + + /** + * @dev Tries to returns the value associated with `key`. O(1). + * Does not revert if `key` is not in the map. + */ + function tryGet(Bytes32ToBytes32Map storage map, bytes32 key) internal view returns (bool, bytes32) { + bytes32 value = map._values[key]; + if (value == bytes32(0)) { + return (contains(map, key), bytes32(0)); + } else { + return (true, value); + } + } + + /** + * @dev Returns the value associated with `key`. O(1). + * + * Requirements: + * + * - `key` must be in the map. + */ + function get(Bytes32ToBytes32Map storage map, bytes32 key) internal view returns (bytes32) { + bytes32 value = map._values[key]; + require(value != 0 || contains(map, key), "EnumerableMap: nonexistent key"); + return value; + } + + /** + * @dev Same as {get}, with a custom error message when `key` is not in the map. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryGet}. + */ + function get( + Bytes32ToBytes32Map storage map, + bytes32 key, + string memory errorMessage + ) internal view returns (bytes32) { + bytes32 value = map._values[key]; + require(value != 0 || contains(map, key), errorMessage); + return value; + } + + /** + * @dev Return the an array containing all the keys + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function keys(Bytes32ToBytes32Map storage map) internal view returns (bytes32[] memory) { + return map._keys.values(); + } + + // UintToUintMap + + struct UintToUintMap { + Bytes32ToBytes32Map _inner; + } + + /** + * @dev Adds a key-value pair to a map, or updates the value for an existing + * key. O(1). + * + * Returns true if the key was added to the map, that is if it was not + * already present. + */ + function set(UintToUintMap storage map, uint256 key, uint256 value) internal returns (bool) { + return set(map._inner, bytes32(key), bytes32(value)); + } + + /** + * @dev Removes a value from a map. O(1). + * + * Returns true if the key was removed from the map, that is if it was present. + */ + function remove(UintToUintMap storage map, uint256 key) internal returns (bool) { + return remove(map._inner, bytes32(key)); + } + + /** + * @dev Returns true if the key is in the map. O(1). + */ + function contains(UintToUintMap storage map, uint256 key) internal view returns (bool) { + return contains(map._inner, bytes32(key)); + } + + /** + * @dev Returns the number of elements in the map. O(1). + */ + function length(UintToUintMap storage map) internal view returns (uint256) { + return length(map._inner); + } + + /** + * @dev Returns the element stored at position `index` in the map. O(1). + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(UintToUintMap storage map, uint256 index) internal view returns (uint256, uint256) { + (bytes32 key, bytes32 value) = at(map._inner, index); + return (uint256(key), uint256(value)); + } + + /** + * @dev Tries to returns the value associated with `key`. O(1). + * Does not revert if `key` is not in the map. + */ + function tryGet(UintToUintMap storage map, uint256 key) internal view returns (bool, uint256) { + (bool success, bytes32 value) = tryGet(map._inner, bytes32(key)); + return (success, uint256(value)); + } + + /** + * @dev Returns the value associated with `key`. O(1). + * + * Requirements: + * + * - `key` must be in the map. + */ + function get(UintToUintMap storage map, uint256 key) internal view returns (uint256) { + return uint256(get(map._inner, bytes32(key))); + } + + /** + * @dev Same as {get}, with a custom error message when `key` is not in the map. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryGet}. + */ + function get(UintToUintMap storage map, uint256 key, string memory errorMessage) internal view returns (uint256) { + return uint256(get(map._inner, bytes32(key), errorMessage)); + } + + /** + * @dev Return the an array containing all the keys + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function keys(UintToUintMap storage map) internal view returns (uint256[] memory) { + bytes32[] memory store = keys(map._inner); + uint256[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // UintToAddressMap + + struct UintToAddressMap { + Bytes32ToBytes32Map _inner; + } + + /** + * @dev Adds a key-value pair to a map, or updates the value for an existing + * key. O(1). + * + * Returns true if the key was added to the map, that is if it was not + * already present. + */ + function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) { + return set(map._inner, bytes32(key), bytes32(uint256(uint160(value)))); + } + + /** + * @dev Removes a value from a map. O(1). + * + * Returns true if the key was removed from the map, that is if it was present. + */ + function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) { + return remove(map._inner, bytes32(key)); + } + + /** + * @dev Returns true if the key is in the map. O(1). + */ + function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) { + return contains(map._inner, bytes32(key)); + } + + /** + * @dev Returns the number of elements in the map. O(1). + */ + function length(UintToAddressMap storage map) internal view returns (uint256) { + return length(map._inner); + } + + /** + * @dev Returns the element stored at position `index` in the map. O(1). + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) { + (bytes32 key, bytes32 value) = at(map._inner, index); + return (uint256(key), address(uint160(uint256(value)))); + } + + /** + * @dev Tries to returns the value associated with `key`. O(1). + * Does not revert if `key` is not in the map. + */ + function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) { + (bool success, bytes32 value) = tryGet(map._inner, bytes32(key)); + return (success, address(uint160(uint256(value)))); + } + + /** + * @dev Returns the value associated with `key`. O(1). + * + * Requirements: + * + * - `key` must be in the map. + */ + function get(UintToAddressMap storage map, uint256 key) internal view returns (address) { + return address(uint160(uint256(get(map._inner, bytes32(key))))); + } + + /** + * @dev Same as {get}, with a custom error message when `key` is not in the map. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryGet}. + */ + function get( + UintToAddressMap storage map, + uint256 key, + string memory errorMessage + ) internal view returns (address) { + return address(uint160(uint256(get(map._inner, bytes32(key), errorMessage)))); + } + + /** + * @dev Return the an array containing all the keys + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function keys(UintToAddressMap storage map) internal view returns (uint256[] memory) { + bytes32[] memory store = keys(map._inner); + uint256[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // AddressToUintMap + + struct AddressToUintMap { + Bytes32ToBytes32Map _inner; + } + + /** + * @dev Adds a key-value pair to a map, or updates the value for an existing + * key. O(1). + * + * Returns true if the key was added to the map, that is if it was not + * already present. + */ + function set(AddressToUintMap storage map, address key, uint256 value) internal returns (bool) { + return set(map._inner, bytes32(uint256(uint160(key))), bytes32(value)); + } + + /** + * @dev Removes a value from a map. O(1). + * + * Returns true if the key was removed from the map, that is if it was present. + */ + function remove(AddressToUintMap storage map, address key) internal returns (bool) { + return remove(map._inner, bytes32(uint256(uint160(key)))); + } + + /** + * @dev Returns true if the key is in the map. O(1). + */ + function contains(AddressToUintMap storage map, address key) internal view returns (bool) { + return contains(map._inner, bytes32(uint256(uint160(key)))); + } + + /** + * @dev Returns the number of elements in the map. O(1). + */ + function length(AddressToUintMap storage map) internal view returns (uint256) { + return length(map._inner); + } + + /** + * @dev Returns the element stored at position `index` in the map. O(1). + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(AddressToUintMap storage map, uint256 index) internal view returns (address, uint256) { + (bytes32 key, bytes32 value) = at(map._inner, index); + return (address(uint160(uint256(key))), uint256(value)); + } + + /** + * @dev Tries to returns the value associated with `key`. O(1). + * Does not revert if `key` is not in the map. + */ + function tryGet(AddressToUintMap storage map, address key) internal view returns (bool, uint256) { + (bool success, bytes32 value) = tryGet(map._inner, bytes32(uint256(uint160(key)))); + return (success, uint256(value)); + } + + /** + * @dev Returns the value associated with `key`. O(1). + * + * Requirements: + * + * - `key` must be in the map. + */ + function get(AddressToUintMap storage map, address key) internal view returns (uint256) { + return uint256(get(map._inner, bytes32(uint256(uint160(key))))); + } + + /** + * @dev Same as {get}, with a custom error message when `key` is not in the map. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryGet}. + */ + function get( + AddressToUintMap storage map, + address key, + string memory errorMessage + ) internal view returns (uint256) { + return uint256(get(map._inner, bytes32(uint256(uint160(key))), errorMessage)); + } + + /** + * @dev Return the an array containing all the keys + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function keys(AddressToUintMap storage map) internal view returns (address[] memory) { + bytes32[] memory store = keys(map._inner); + address[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } + + // Bytes32ToUintMap + + struct Bytes32ToUintMap { + Bytes32ToBytes32Map _inner; + } + + /** + * @dev Adds a key-value pair to a map, or updates the value for an existing + * key. O(1). + * + * Returns true if the key was added to the map, that is if it was not + * already present. + */ + function set(Bytes32ToUintMap storage map, bytes32 key, uint256 value) internal returns (bool) { + return set(map._inner, key, bytes32(value)); + } + + /** + * @dev Removes a value from a map. O(1). + * + * Returns true if the key was removed from the map, that is if it was present. + */ + function remove(Bytes32ToUintMap storage map, bytes32 key) internal returns (bool) { + return remove(map._inner, key); + } + + /** + * @dev Returns true if the key is in the map. O(1). + */ + function contains(Bytes32ToUintMap storage map, bytes32 key) internal view returns (bool) { + return contains(map._inner, key); + } + + /** + * @dev Returns the number of elements in the map. O(1). + */ + function length(Bytes32ToUintMap storage map) internal view returns (uint256) { + return length(map._inner); + } + + /** + * @dev Returns the element stored at position `index` in the map. O(1). + * Note that there are no guarantees on the ordering of values inside the + * array, and it may change when more values are added or removed. + * + * Requirements: + * + * - `index` must be strictly less than {length}. + */ + function at(Bytes32ToUintMap storage map, uint256 index) internal view returns (bytes32, uint256) { + (bytes32 key, bytes32 value) = at(map._inner, index); + return (key, uint256(value)); + } + + /** + * @dev Tries to returns the value associated with `key`. O(1). + * Does not revert if `key` is not in the map. + */ + function tryGet(Bytes32ToUintMap storage map, bytes32 key) internal view returns (bool, uint256) { + (bool success, bytes32 value) = tryGet(map._inner, key); + return (success, uint256(value)); + } + + /** + * @dev Returns the value associated with `key`. O(1). + * + * Requirements: + * + * - `key` must be in the map. + */ + function get(Bytes32ToUintMap storage map, bytes32 key) internal view returns (uint256) { + return uint256(get(map._inner, key)); + } + + /** + * @dev Same as {get}, with a custom error message when `key` is not in the map. + * + * CAUTION: This function is deprecated because it requires allocating memory for the error + * message unnecessarily. For custom revert reasons use {tryGet}. + */ + function get( + Bytes32ToUintMap storage map, + bytes32 key, + string memory errorMessage + ) internal view returns (uint256) { + return uint256(get(map._inner, key, errorMessage)); + } + + /** + * @dev Return the an array containing all the keys + * + * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed + * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that + * this function has an unbounded cost, and using it as part of a state-changing function may render the function + * uncallable if the map grows to a point where copying to memory consumes too much gas to fit in a block. + */ + function keys(Bytes32ToUintMap storage map) internal view returns (bytes32[] memory) { + bytes32[] memory store = keys(map._inner); + bytes32[] memory result; + + /// @solidity memory-safe-assembly + assembly { + result := store + } + + return result; + } +} + + +// File @openzeppelin/contracts/utils/Address.sol@v4.9.3 + +// Original license: SPDX_License_Identifier: MIT +// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) + +pragma solidity ^0.8.1; + +/** + * @dev Collection of functions related to the address type + */ +library Address { + /** + * @dev Returns true if `account` is a contract. + * + * [IMPORTANT] + * ==== + * It is unsafe to assume that an address for which this function returns + * false is an externally-owned account (EOA) and not a contract. + * + * Among others, `isContract` will return false for the following + * types of addresses: + * + * - an externally-owned account + * - a contract in construction + * - an address where a contract will be created + * - an address where a contract lived, but was destroyed + * + * Furthermore, `isContract` will also return true if the target contract within + * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, + * which only has an effect at the end of a transaction. + * ==== + * + * [IMPORTANT] + * ==== + * You shouldn't rely on `isContract` to protect against flash loan attacks! + * + * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets + * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract + * constructor. + * ==== + */ + function isContract(address account) internal view returns (bool) { + // This method relies on extcodesize/address.code.length, which returns 0 + // for contracts in construction, since the code is only stored at the end + // of the constructor execution. + + return account.code.length > 0; + } + + /** + * @dev Replacement for Solidity's `transfer`: sends `amount` wei to + * `recipient`, forwarding all available gas and reverting on errors. + * + * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost + * of certain opcodes, possibly making contracts go over the 2300 gas limit + * imposed by `transfer`, making them unable to receive funds via + * `transfer`. {sendValue} removes this limitation. + * + * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. + * + * IMPORTANT: because control is transferred to `recipient`, care must be + * taken to not create reentrancy vulnerabilities. Consider using + * {ReentrancyGuard} or the + * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. + */ + function sendValue(address payable recipient, uint256 amount) internal { + require(address(this).balance >= amount, "Address: insufficient balance"); + + (bool success, ) = recipient.call{value: amount}(""); + require(success, "Address: unable to send value, recipient may have reverted"); + } + + /** + * @dev Performs a Solidity function call using a low level `call`. A + * plain `call` is an unsafe replacement for a function call: use this + * function instead. + * + * If `target` reverts with a revert reason, it is bubbled up by this + * function (like regular Solidity function calls). + * + * Returns the raw returned data. To convert to the expected return value, + * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. + * + * Requirements: + * + * - `target` must be a contract. + * - calling `target` with `data` must not revert. + * + * _Available since v3.1._ + */ + function functionCall(address target, bytes memory data) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, "Address: low-level call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with + * `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + return functionCallWithValue(target, data, 0, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but also transferring `value` wei to `target`. + * + * Requirements: + * + * - the calling contract must have an ETH balance of at least `value`. + * - the called Solidity function must be `payable`. + * + * _Available since v3.1._ + */ + function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { + return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); + } + + /** + * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but + * with `errorMessage` as a fallback revert reason when `target` reverts. + * + * _Available since v3.1._ + */ + function functionCallWithValue( + address target, + bytes memory data, + uint256 value, + string memory errorMessage + ) internal returns (bytes memory) { + require(address(this).balance >= value, "Address: insufficient balance for call"); + (bool success, bytes memory returndata) = target.call{value: value}(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { + return functionStaticCall(target, data, "Address: low-level static call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a static call. + * + * _Available since v3.3._ + */ + function functionStaticCall( + address target, + bytes memory data, + string memory errorMessage + ) internal view returns (bytes memory) { + (bool success, bytes memory returndata) = target.staticcall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { + return functionDelegateCall(target, data, "Address: low-level delegate call failed"); + } + + /** + * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], + * but performing a delegate call. + * + * _Available since v3.4._ + */ + function functionDelegateCall( + address target, + bytes memory data, + string memory errorMessage + ) internal returns (bytes memory) { + (bool success, bytes memory returndata) = target.delegatecall(data); + return verifyCallResultFromTarget(target, success, returndata, errorMessage); + } + + /** + * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling + * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. + * + * _Available since v4.8._ + */ + function verifyCallResultFromTarget( + address target, + bool success, + bytes memory returndata, + string memory errorMessage + ) internal view returns (bytes memory) { + if (success) { + if (returndata.length == 0) { + // only check isContract if the call was successful and the return data is empty + // otherwise we already know that it was a contract + require(isContract(target), "Address: call to non-contract"); + } + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + /** + * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the + * revert reason or using the provided one. + * + * _Available since v4.3._ + */ + function verifyCallResult( + bool success, + bytes memory returndata, + string memory errorMessage + ) internal pure returns (bytes memory) { + if (success) { + return returndata; + } else { + _revert(returndata, errorMessage); + } + } + + function _revert(bytes memory returndata, string memory errorMessage) private pure { + // Look for revert reason and bubble it up if present + if (returndata.length > 0) { + // The easiest way to bubble the revert reason is using memory via assembly + /// @solidity memory-safe-assembly + assembly { + let returndata_size := mload(returndata) + revert(add(32, returndata), returndata_size) + } + } else { + revert(errorMessage); + } + } +} + + +// File contracts/interfaces/hooks/IPostDispatchHook.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.8.0; + +/*@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@ HYPERLANE @@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ +@@@@@@@@@ @@@@@@@@*/ + +interface IPostDispatchHook { + enum Types { + UNUSED, + ROUTING, + AGGREGATION, + MERKLE_TREE, + INTERCHAIN_GAS_PAYMASTER, + FALLBACK_ROUTING, + ID_AUTH_ISM, + PAUSABLE, + PROTOCOL_FEE, + LAYER_ZERO_V1, + RATE_LIMITED, + ARB_L2_TO_L1, + OP_L2_TO_L1 + } + + /** + * @notice Returns an enum that represents the type of hook + */ + function hookType() external view returns (uint8); + + /** + * @notice Returns whether the hook supports metadata + * @param metadata metadata + * @return Whether the hook supports metadata + */ + function supportsMetadata( + bytes calldata metadata + ) external view returns (bool); + + /** + * @notice Post action after a message is dispatched via the Mailbox + * @param metadata The metadata required for the hook + * @param message The message passed from the Mailbox.dispatch() call + */ + function postDispatch( + bytes calldata metadata, + bytes calldata message + ) external payable; + + /** + * @notice Compute the payment required by the postDispatch call + * @param metadata The metadata required for the hook + * @param message The message passed from the Mailbox.dispatch() call + * @return Quoted payment for the postDispatch call + */ + function quoteDispatch( + bytes calldata metadata, + bytes calldata message + ) external view returns (uint256); +} + + +// File contracts/interfaces/IInterchainSecurityModule.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +interface IInterchainSecurityModule { + enum Types { + UNUSED, + ROUTING, + AGGREGATION, + LEGACY_MULTISIG, + MERKLE_ROOT_MULTISIG, + MESSAGE_ID_MULTISIG, + NULL, // used with relayer carrying no metadata + CCIP_READ, + ARB_L2_TO_L1, + WEIGHTED_MERKLE_ROOT_MULTISIG, + WEIGHTED_MESSAGE_ID_MULTISIG, + OP_L2_TO_L1 + } + + /** + * @notice Returns an enum that represents the type of security model + * encoded by this ISM. + * @dev Relayers infer how to fetch and format metadata. + */ + function moduleType() external view returns (uint8); + + /** + * @notice Defines a security model responsible for verifying interchain + * messages based on the provided metadata. + * @param _metadata Off-chain metadata provided by a relayer, specific to + * the security model encoded by the module (e.g. validator signatures) + * @param _message Hyperlane encoded interchain message + * @return True if the message was verified + */ + function verify( + bytes calldata _metadata, + bytes calldata _message + ) external returns (bool); +} + +interface ISpecifiesInterchainSecurityModule { + function interchainSecurityModule() + external + view + returns (IInterchainSecurityModule); +} + + +// File contracts/interfaces/IMailbox.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.8.0; + + +interface IMailbox { + // ============ Events ============ + /** + * @notice Emitted when a new message is dispatched via Hyperlane + * @param sender The address that dispatched the message + * @param destination The destination domain of the message + * @param recipient The message recipient address on `destination` + * @param message Raw bytes of message + */ + event Dispatch( + address indexed sender, + uint32 indexed destination, + bytes32 indexed recipient, + bytes message + ); + + /** + * @notice Emitted when a new message is dispatched via Hyperlane + * @param messageId The unique message identifier + */ + event DispatchId(bytes32 indexed messageId); + + /** + * @notice Emitted when a Hyperlane message is processed + * @param messageId The unique message identifier + */ + event ProcessId(bytes32 indexed messageId); + + /** + * @notice Emitted when a Hyperlane message is delivered + * @param origin The origin domain of the message + * @param sender The message sender address on `origin` + * @param recipient The address that handled the message + */ + event Process( + uint32 indexed origin, + bytes32 indexed sender, + address indexed recipient + ); + + function localDomain() external view returns (uint32); + + function delivered(bytes32 messageId) external view returns (bool); + + function defaultIsm() external view returns (IInterchainSecurityModule); + + function defaultHook() external view returns (IPostDispatchHook); + + function requiredHook() external view returns (IPostDispatchHook); + + function latestDispatchedId() external view returns (bytes32); + + function dispatch( + uint32 destinationDomain, + bytes32 recipientAddress, + bytes calldata messageBody + ) external payable returns (bytes32 messageId); + + function quoteDispatch( + uint32 destinationDomain, + bytes32 recipientAddress, + bytes calldata messageBody + ) external view returns (uint256 fee); + + function dispatch( + uint32 destinationDomain, + bytes32 recipientAddress, + bytes calldata body, + bytes calldata defaultHookMetadata + ) external payable returns (bytes32 messageId); + + function quoteDispatch( + uint32 destinationDomain, + bytes32 recipientAddress, + bytes calldata messageBody, + bytes calldata defaultHookMetadata + ) external view returns (uint256 fee); + + function dispatch( + uint32 destinationDomain, + bytes32 recipientAddress, + bytes calldata body, + bytes calldata customHookMetadata, + IPostDispatchHook customHook + ) external payable returns (bytes32 messageId); + + function quoteDispatch( + uint32 destinationDomain, + bytes32 recipientAddress, + bytes calldata messageBody, + bytes calldata customHookMetadata, + IPostDispatchHook customHook + ) external view returns (uint256 fee); + + function process( + bytes calldata metadata, + bytes calldata message + ) external payable; + + function recipientIsm( + address recipient + ) external view returns (IInterchainSecurityModule module); +} + + +// File contracts/libs/TypeCasts.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +library TypeCasts { + // alignment preserving cast + function addressToBytes32(address _addr) internal pure returns (bytes32) { + return bytes32(uint256(uint160(_addr))); + } + + // alignment preserving cast + function bytes32ToAddress(bytes32 _buf) internal pure returns (address) { + require( + uint256(_buf) <= uint256(type(uint160).max), + "TypeCasts: bytes32ToAddress overflow" + ); + return address(uint160(uint256(_buf))); + } +} + + +// File contracts/libs/Message.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.8.0; + +/** + * @title Hyperlane Message Library + * @notice Library for formatted messages used by Mailbox + **/ +library Message { + using TypeCasts for bytes32; + + uint256 private constant VERSION_OFFSET = 0; + uint256 private constant NONCE_OFFSET = 1; + uint256 private constant ORIGIN_OFFSET = 5; + uint256 private constant SENDER_OFFSET = 9; + uint256 private constant DESTINATION_OFFSET = 41; + uint256 private constant RECIPIENT_OFFSET = 45; + uint256 private constant BODY_OFFSET = 77; + + /** + * @notice Returns formatted (packed) Hyperlane message with provided fields + * @dev This function should only be used in memory message construction. + * @param _version The version of the origin and destination Mailboxes + * @param _nonce A nonce to uniquely identify the message on its origin chain + * @param _originDomain Domain of origin chain + * @param _sender Address of sender as bytes32 + * @param _destinationDomain Domain of destination chain + * @param _recipient Address of recipient on destination chain as bytes32 + * @param _messageBody Raw bytes of message body + * @return Formatted message + */ + function formatMessage( + uint8 _version, + uint32 _nonce, + uint32 _originDomain, + bytes32 _sender, + uint32 _destinationDomain, + bytes32 _recipient, + bytes calldata _messageBody + ) internal pure returns (bytes memory) { + return + abi.encodePacked( + _version, + _nonce, + _originDomain, + _sender, + _destinationDomain, + _recipient, + _messageBody + ); + } + + /** + * @notice Returns the message ID. + * @param _message ABI encoded Hyperlane message. + * @return ID of `_message` + */ + function id(bytes memory _message) internal pure returns (bytes32) { + return keccak256(_message); + } + + /** + * @notice Returns the message version. + * @param _message ABI encoded Hyperlane message. + * @return Version of `_message` + */ + function version(bytes calldata _message) internal pure returns (uint8) { + return uint8(bytes1(_message[VERSION_OFFSET:NONCE_OFFSET])); + } + + /** + * @notice Returns the message nonce. + * @param _message ABI encoded Hyperlane message. + * @return Nonce of `_message` + */ + function nonce(bytes calldata _message) internal pure returns (uint32) { + return uint32(bytes4(_message[NONCE_OFFSET:ORIGIN_OFFSET])); + } + + /** + * @notice Returns the message origin domain. + * @param _message ABI encoded Hyperlane message. + * @return Origin domain of `_message` + */ + function origin(bytes calldata _message) internal pure returns (uint32) { + return uint32(bytes4(_message[ORIGIN_OFFSET:SENDER_OFFSET])); + } + + /** + * @notice Returns the message sender as bytes32. + * @param _message ABI encoded Hyperlane message. + * @return Sender of `_message` as bytes32 + */ + function sender(bytes calldata _message) internal pure returns (bytes32) { + return bytes32(_message[SENDER_OFFSET:DESTINATION_OFFSET]); + } + + /** + * @notice Returns the message sender as address. + * @param _message ABI encoded Hyperlane message. + * @return Sender of `_message` as address + */ + function senderAddress( + bytes calldata _message + ) internal pure returns (address) { + return sender(_message).bytes32ToAddress(); + } + + /** + * @notice Returns the message destination domain. + * @param _message ABI encoded Hyperlane message. + * @return Destination domain of `_message` + */ + function destination( + bytes calldata _message + ) internal pure returns (uint32) { + return uint32(bytes4(_message[DESTINATION_OFFSET:RECIPIENT_OFFSET])); + } + + /** + * @notice Returns the message recipient as bytes32. + * @param _message ABI encoded Hyperlane message. + * @return Recipient of `_message` as bytes32 + */ + function recipient( + bytes calldata _message + ) internal pure returns (bytes32) { + return bytes32(_message[RECIPIENT_OFFSET:BODY_OFFSET]); + } + + /** + * @notice Returns the message recipient as address. + * @param _message ABI encoded Hyperlane message. + * @return Recipient of `_message` as address + */ + function recipientAddress( + bytes calldata _message + ) internal pure returns (address) { + return recipient(_message).bytes32ToAddress(); + } + + /** + * @notice Returns the message body. + * @param _message ABI encoded Hyperlane message. + * @return Body of `_message` + */ + function body( + bytes calldata _message + ) internal pure returns (bytes calldata) { + return bytes(_message[BODY_OFFSET:]); + } +} + + +// File contracts/PackageVersioned.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +/** + * @title PackageVersioned + * @notice Package version getter for contracts + **/ +abstract contract PackageVersioned { + // GENERATED CODE - DO NOT EDIT + string public constant PACKAGE_VERSION = "5.6.1"; +} + + +// File contracts/client/MailboxClient.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +// ============ Internal Imports ============ + + + + + +// ============ External Imports ============ + + +abstract contract MailboxClient is OwnableUpgradeable, PackageVersioned { + using Message for bytes; + + IMailbox public immutable mailbox; + + uint32 public immutable localDomain; + + IPostDispatchHook public hook; + + IInterchainSecurityModule public interchainSecurityModule; + + uint256[48] private __GAP; // gap for upgrade safety + + // ============ Modifiers ============ + modifier onlyContract(address _contract) { + require( + Address.isContract(_contract), + "MailboxClient: invalid mailbox" + ); + _; + } + + modifier onlyContractOrNull(address _contract) { + require( + Address.isContract(_contract) || _contract == address(0), + "MailboxClient: invalid contract setting" + ); + _; + } + + /** + * @notice Only accept messages from an Hyperlane Mailbox contract + */ + modifier onlyMailbox() { + require( + msg.sender == address(mailbox), + "MailboxClient: sender not mailbox" + ); + _; + } + + constructor(address _mailbox) onlyContract(_mailbox) { + mailbox = IMailbox(_mailbox); + localDomain = mailbox.localDomain(); + _transferOwnership(msg.sender); + } + + /** + * @notice Sets the address of the application's custom hook. + * @param _hook The address of the hook contract. + */ + function setHook(address _hook) public onlyContractOrNull(_hook) onlyOwner { + hook = IPostDispatchHook(_hook); + } + + /** + * @notice Sets the address of the application's custom interchain security module. + * @param _module The address of the interchain security module contract. + */ + function setInterchainSecurityModule( + address _module + ) public onlyContractOrNull(_module) onlyOwner { + interchainSecurityModule = IInterchainSecurityModule(_module); + } + + // ======== Initializer ========= + function _MailboxClient_initialize( + address _hook, + address _interchainSecurityModule, + address _owner + ) internal onlyInitializing { + __Ownable_init(); + setHook(_hook); + setInterchainSecurityModule(_interchainSecurityModule); + _transferOwnership(_owner); + } + + function _isLatestDispatched(bytes32 id) internal view returns (bool) { + return mailbox.latestDispatchedId() == id; + } + + function _isDelivered(bytes32 id) internal view returns (bool) { + return mailbox.delivered(id); + } +} + + +// File contracts/interfaces/IMessageRecipient.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +interface IMessageRecipient { + function handle( + uint32 _origin, + bytes32 _sender, + bytes calldata _message + ) external payable; +} + + +// File contracts/libs/EnumerableMapExtended.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +// ============ External Imports ============ + + +// extends EnumerableMap with uint256 => bytes32 type +// modelled after https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.8.0/contracts/utils/structs/EnumerableMap.sol +library EnumerableMapExtended { + using EnumerableMap for EnumerableMap.Bytes32ToBytes32Map; + using EnumerableSet for EnumerableSet.Bytes32Set; + + struct UintToBytes32Map { + EnumerableMap.Bytes32ToBytes32Map _inner; + } + + // ============ Library Functions ============ + function keys( + UintToBytes32Map storage map + ) internal view returns (uint256[] memory _keys) { + uint256 _length = map._inner.length(); + _keys = new uint256[](_length); + for (uint256 i = 0; i < _length; i++) { + _keys[i] = uint256(map._inner._keys.at(i)); + } + } + + function uint32Keys( + UintToBytes32Map storage map + ) internal view returns (uint32[] memory _keys) { + uint256[] memory uint256keys = keys(map); + _keys = new uint32[](uint256keys.length); + for (uint256 i = 0; i < uint256keys.length; i++) { + _keys[i] = uint32(uint256keys[i]); + } + } + + function set( + UintToBytes32Map storage map, + uint256 key, + bytes32 value + ) internal { + map._inner.set(bytes32(key), value); + } + + function get( + UintToBytes32Map storage map, + uint256 key + ) internal view returns (bytes32) { + return map._inner.get(bytes32(key)); + } + + function tryGet( + UintToBytes32Map storage map, + uint256 key + ) internal view returns (bool, bytes32) { + return map._inner.tryGet(bytes32(key)); + } + + function remove( + UintToBytes32Map storage map, + uint256 key + ) internal returns (bool) { + return map._inner.remove(bytes32(key)); + } + + function contains( + UintToBytes32Map storage map, + uint256 key + ) internal view returns (bool) { + return map._inner.contains(bytes32(key)); + } + + function length( + UintToBytes32Map storage map + ) internal view returns (uint256) { + return map._inner.length(); + } + + function at( + UintToBytes32Map storage map, + uint256 index + ) internal view returns (uint256, bytes32) { + (bytes32 key, bytes32 value) = map._inner.at(index); + return (uint256(key), value); + } +} + + +// File contracts/client/Router.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +// ============ Internal Imports ============ + + + + + +// ============ External Imports ============ + +abstract contract Router is MailboxClient, IMessageRecipient { + using EnumerableMapExtended for EnumerableMapExtended.UintToBytes32Map; + using Strings for uint32; + + // ============ Mutable Storage ============ + EnumerableMapExtended.UintToBytes32Map internal _routers; + + uint256[48] private __GAP; // gap for upgrade safety + + constructor(address _mailbox) MailboxClient(_mailbox) {} + + // ============ External functions ============ + function domains() external view returns (uint32[] memory) { + return _routers.uint32Keys(); + } + + /** + * @notice Returns the address of the Router contract for the given domain + * @param _domain The remote domain ID. + * @dev Returns 0 address if no router is enrolled for the given domain + * @return router The address of the Router contract for the given domain + */ + function routers(uint32 _domain) public view virtual returns (bytes32) { + (, bytes32 _router) = _routers.tryGet(_domain); + return _router; + } + + /** + * @notice Unregister the domain + * @param _domain The domain of the remote Application Router + */ + function unenrollRemoteRouter(uint32 _domain) external virtual onlyOwner { + _unenrollRemoteRouter(_domain); + } + + /** + * @notice Register the address of a Router contract for the same Application on a remote chain + * @param _domain The domain of the remote Application Router + * @param _router The address of the remote Application Router + */ + function enrollRemoteRouter( + uint32 _domain, + bytes32 _router + ) external virtual onlyOwner { + _enrollRemoteRouter(_domain, _router); + } + + /** + * @notice Batch version of `enrollRemoteRouter` + * @param _domains The domains of the remote Application Routers + * @param _addresses The addresses of the remote Application Routers + */ + function enrollRemoteRouters( + uint32[] calldata _domains, + bytes32[] calldata _addresses + ) external virtual onlyOwner { + require(_domains.length == _addresses.length, "!length"); + uint256 length = _domains.length; + for (uint256 i = 0; i < length; i += 1) { + _enrollRemoteRouter(_domains[i], _addresses[i]); + } + } + + /** + * @notice Batch version of `unenrollRemoteRouter` + * @param _domains The domains of the remote Application Routers + */ + function unenrollRemoteRouters( + uint32[] calldata _domains + ) external virtual onlyOwner { + uint256 length = _domains.length; + for (uint256 i = 0; i < length; i += 1) { + _unenrollRemoteRouter(_domains[i]); + } + } + + /** + * @notice Handles an incoming message + * @param _origin The origin domain + * @param _sender The sender address + * @param _message The message + */ + function handle( + uint32 _origin, + bytes32 _sender, + bytes calldata _message + ) external payable virtual override onlyMailbox { + bytes32 _router = _mustHaveRemoteRouter(_origin); + require(_router == _sender, "Enrolled router does not match sender"); + _handle(_origin, _sender, _message); + } + + // ============ Virtual functions ============ + function _handle( + uint32 _origin, + bytes32 _sender, + bytes calldata _message + ) internal virtual; + + // ============ Internal functions ============ + + /** + * @notice Set the router for a given domain + * @param _domain The domain + * @param _address The new router + */ + function _enrollRemoteRouter( + uint32 _domain, + bytes32 _address + ) internal virtual { + _routers.set(_domain, _address); + } + + /** + * @notice Remove the router for a given domain + * @param _domain The domain + */ + function _unenrollRemoteRouter(uint32 _domain) internal virtual { + require(_routers.remove(_domain), _domainNotFoundError(_domain)); + } + + /** + * @notice Return true if the given domain / router is the address of a remote Application Router + * @param _domain The domain of the potential remote Application Router + * @param _address The address of the potential remote Application Router + */ + function _isRemoteRouter( + uint32 _domain, + bytes32 _address + ) internal view returns (bool) { + return routers(_domain) == _address; + } + + /** + * @notice Assert that the given domain has a Application Router registered and return its address + * @param _domain The domain of the chain for which to get the Application Router + * @return _router The address of the remote Application Router on _domain + */ + function _mustHaveRemoteRouter( + uint32 _domain + ) internal view returns (bytes32) { + (bool contained, bytes32 _router) = _routers.tryGet(_domain); + if (contained) { + return _router; + } + revert(_domainNotFoundError(_domain)); + } + + function _domainNotFoundError( + uint32 _domain + ) internal pure returns (string memory) { + return + string.concat( + "No router enrolled for domain: ", + _domain.toString() + ); + } + + function _Router_dispatch( + uint32 _destinationDomain, + uint256 _value, + bytes memory _messageBody, + bytes memory _hookMetadata, + address _hook + ) internal returns (bytes32) { + bytes32 _router = _mustHaveRemoteRouter(_destinationDomain); + return + mailbox.dispatch{value: _value}( + _destinationDomain, + _router, + _messageBody, + _hookMetadata, + IPostDispatchHook(_hook) + ); + } + + /** + * DEPRECATED: Use `_Router_dispatch` instead + * @dev For backward compatibility with v2 client contracts + */ + function _dispatch( + uint32 _destinationDomain, + bytes memory _messageBody + ) internal returns (bytes32) { + return + _Router_dispatch( + _destinationDomain, + msg.value, + _messageBody, + "", + address(hook) + ); + } + + function _Router_quoteDispatch( + uint32 _destinationDomain, + bytes memory _messageBody, + bytes memory _hookMetadata, + address _hook + ) internal view returns (uint256) { + bytes32 _router = _mustHaveRemoteRouter(_destinationDomain); + return + mailbox.quoteDispatch( + _destinationDomain, + _router, + _messageBody, + _hookMetadata, + IPostDispatchHook(_hook) + ); + } + + /** + * DEPRECATED: Use `_Router_quoteDispatch` instead + * @dev For backward compatibility with v2 client contracts + */ + function _quoteDispatch( + uint32 _destinationDomain, + bytes memory _messageBody + ) internal view returns (uint256) { + return + _Router_quoteDispatch( + _destinationDomain, + _messageBody, + "", + address(hook) + ); + } +} + + +// File contracts/hooks/libs/StandardHookMetadata.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.8.0; + +/*@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@ HYPERLANE @@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ +@@@@@@@@@ @@@@@@@@*/ + +/** + * Format of metadata: + * + * [0:2] variant + * [2:34] msg.value + * [34:66] Gas limit for message (IGP) + * [66:86] Refund address for message (IGP) + * [86:] Custom metadata + */ +library StandardHookMetadata { + struct Metadata { + uint16 variant; + uint256 msgValue; + uint256 gasLimit; + address refundAddress; + } + + uint8 private constant VARIANT_OFFSET = 0; + uint8 private constant MSG_VALUE_OFFSET = 2; + uint8 private constant GAS_LIMIT_OFFSET = 34; + uint8 private constant REFUND_ADDRESS_OFFSET = 66; + uint256 private constant MIN_METADATA_LENGTH = 86; + + uint16 public constant VARIANT = 1; + + /** + * @notice Returns the variant of the metadata. + * @param _metadata ABI encoded standard hook metadata. + * @return variant of the metadata as uint8. + */ + function variant(bytes calldata _metadata) internal pure returns (uint16) { + if (_metadata.length < VARIANT_OFFSET + 2) return 0; + return uint16(bytes2(_metadata[VARIANT_OFFSET:VARIANT_OFFSET + 2])); + } + + /** + * @notice Returns the specified value for the message. + * @param _metadata ABI encoded standard hook metadata. + * @param _default Default fallback value. + * @return Value for the message as uint256. + */ + function msgValue( + bytes calldata _metadata, + uint256 _default + ) internal pure returns (uint256) { + if (_metadata.length < MSG_VALUE_OFFSET + 32) return _default; + return + uint256(bytes32(_metadata[MSG_VALUE_OFFSET:MSG_VALUE_OFFSET + 32])); + } + + /** + * @notice Returns the specified gas limit for the message. + * @param _metadata ABI encoded standard hook metadata. + * @param _default Default fallback gas limit. + * @return Gas limit for the message as uint256. + */ + function gasLimit( + bytes calldata _metadata, + uint256 _default + ) internal pure returns (uint256) { + if (_metadata.length < GAS_LIMIT_OFFSET + 32) return _default; + return + uint256(bytes32(_metadata[GAS_LIMIT_OFFSET:GAS_LIMIT_OFFSET + 32])); + } + + /** + * @notice Returns the specified refund address for the message. + * @param _metadata ABI encoded standard hook metadata. + * @param _default Default fallback refund address. + * @return Refund address for the message as address. + */ + function refundAddress( + bytes calldata _metadata, + address _default + ) internal pure returns (address) { + if (_metadata.length < REFUND_ADDRESS_OFFSET + 20) return _default; + return + address( + bytes20( + _metadata[REFUND_ADDRESS_OFFSET:REFUND_ADDRESS_OFFSET + 20] + ) + ); + } + + /** + * @notice Returns any custom metadata. + * @param _metadata ABI encoded standard hook metadata. + * @return Custom metadata. + */ + function getCustomMetadata( + bytes calldata _metadata + ) internal pure returns (bytes calldata) { + if (_metadata.length < MIN_METADATA_LENGTH) return _metadata[0:0]; + return _metadata[MIN_METADATA_LENGTH:]; + } + + /** + * @notice Formats the specified gas limit and refund address into standard hook metadata. + * @param _msgValue msg.value for the message. + * @param _gasLimit Gas limit for the message. + * @param _refundAddress Refund address for the message. + * @param _customMetadata Additional metadata to include in the standard hook metadata. + * @return ABI encoded standard hook metadata. + */ + function formatMetadata( + uint256 _msgValue, + uint256 _gasLimit, + address _refundAddress, + bytes memory _customMetadata + ) internal pure returns (bytes memory) { + return + abi.encodePacked( + VARIANT, + _msgValue, + _gasLimit, + _refundAddress, + _customMetadata + ); + } + + /** + * @notice Formats the specified gas limit and refund address into standard hook metadata. + * @param _msgValue msg.value for the message. + * @return ABI encoded standard hook metadata. + */ + function overrideMsgValue( + uint256 _msgValue + ) internal view returns (bytes memory) { + return formatMetadata(_msgValue, uint256(0), msg.sender, ""); + } + + /** + * @notice Formats the specified gas limit and refund address into standard hook metadata. + * @param _gasLimit Gas limit for the message. + * @return ABI encoded standard hook metadata. + */ + function overrideGasLimit( + uint256 _gasLimit + ) internal view returns (bytes memory) { + return formatMetadata(uint256(0), _gasLimit, msg.sender, ""); + } + + /** + * @notice Formats the specified refund address into standard hook metadata. + * @param _refundAddress Refund address for the message. + * @return ABI encoded standard hook metadata. + */ + function overrideRefundAddress( + address _refundAddress + ) internal pure returns (bytes memory) { + return formatMetadata(uint256(0), uint256(0), _refundAddress, ""); + } +} + + +// File contracts/client/GasRouter.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.6.11; + +/*@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@ HYPERLANE @@@@@@@ + @@@@@@@@@@@@@@@@@@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ + @@@@@@@@@ @@@@@@@@@ +@@@@@@@@@ @@@@@@@@*/ + +// ============ Internal Imports ============ + + +abstract contract GasRouter is Router { + event GasSet(uint32 domain, uint256 gas); + + // ============ Mutable Storage ============ + mapping(uint32 => uint256) public destinationGas; + + struct GasRouterConfig { + uint32 domain; + uint256 gas; + } + + constructor(address _mailbox) Router(_mailbox) {} + + /** + * @notice Sets the gas amount dispatched for each configured domain. + * @param gasConfigs The array of GasRouterConfig structs + */ + function setDestinationGas( + GasRouterConfig[] calldata gasConfigs + ) external onlyOwner { + for (uint256 i = 0; i < gasConfigs.length; i += 1) { + _setDestinationGas(gasConfigs[i].domain, gasConfigs[i].gas); + } + } + + /** + * @notice Sets the gas amount dispatched for each configured domain. + * @param domain The destination domain ID + * @param gas The gas limit + */ + function setDestinationGas(uint32 domain, uint256 gas) external onlyOwner { + _setDestinationGas(domain, gas); + } + + /** + * @notice Returns the gas payment required to dispatch a message to the given domain's router. + * @param _destinationDomain The domain of the router. + * @return _gasPayment Payment computed by the registered InterchainGasPaymaster. + */ + function quoteGasPayment( + uint32 _destinationDomain + ) external view returns (uint256) { + return _GasRouter_quoteDispatch(_destinationDomain, "", address(hook)); + } + + function _GasRouter_hookMetadata( + uint32 _destination + ) internal view returns (bytes memory) { + return + StandardHookMetadata.overrideGasLimit(destinationGas[_destination]); + } + + function _setDestinationGas(uint32 domain, uint256 gas) internal { + destinationGas[domain] = gas; + emit GasSet(domain, gas); + } + + function _GasRouter_dispatch( + uint32 _destination, + uint256 _value, + bytes memory _messageBody, + address _hook + ) internal returns (bytes32) { + return + _Router_dispatch( + _destination, + _value, + _messageBody, + _GasRouter_hookMetadata(_destination), + _hook + ); + } + + function _GasRouter_quoteDispatch( + uint32 _destination, + bytes memory _messageBody, + address _hook + ) internal view returns (uint256) { + return + _Router_quoteDispatch( + _destination, + _messageBody, + _GasRouter_hookMetadata(_destination), + _hook + ); + } +} + + +// File contracts/token/libs/TokenMessage.sol + +// Original license: SPDX_License_Identifier: MIT +pragma solidity >=0.8.0; + +library TokenMessage { + function format( + bytes32 _recipient, + uint256 _amount, + bytes memory _metadata + ) internal pure returns (bytes memory) { + return abi.encodePacked(_recipient, _amount, _metadata); + } + + function recipient(bytes calldata message) internal pure returns (bytes32) { + return bytes32(message[0:32]); + } + + function amount(bytes calldata message) internal pure returns (uint256) { + return uint256(bytes32(message[32:64])); + } + + // alias for ERC721 + function tokenId(bytes calldata message) internal pure returns (uint256) { + return amount(message); + } + + function metadata( + bytes calldata message + ) internal pure returns (bytes calldata) { + return message[64:]; + } +} + + +// File contracts/token/libs/TokenRouter.sol + +// Original license: SPDX_License_Identifier: Apache-2.0 +pragma solidity >=0.8.0; + + + + + +/** + * @title Hyperlane Token Router that extends Router with abstract token (ERC20/ERC721) remote transfer functionality. + * @author Abacus Works + */ +abstract contract TokenRouter is GasRouter { + using TypeCasts for bytes32; + using TypeCasts for address; + using TokenMessage for bytes; + + /** + * @dev Emitted on `transferRemote` when a transfer message is dispatched. + * @param destination The identifier of the destination chain. + * @param recipient The address of the recipient on the destination chain. + * @param amount The amount of tokens burnt on the origin chain. + */ + event SentTransferRemote( + uint32 indexed destination, + bytes32 indexed recipient, + uint256 amount + ); + + /** + * @dev Emitted on `_handle` when a transfer message is processed. + * @param origin The identifier of the origin chain. + * @param recipient The address of the recipient on the destination chain. + * @param amount The amount of tokens minted on the destination chain. + */ + event ReceivedTransferRemote( + uint32 indexed origin, + bytes32 indexed recipient, + uint256 amount + ); + + constructor(address _mailbox) GasRouter(_mailbox) {} + + /** + * @notice Transfers `_amountOrId` token to `_recipient` on `_destination` domain. + * @dev Delegates transfer logic to `_transferFromSender` implementation. + * @dev Emits `SentTransferRemote` event on the origin chain. + * @param _destination The identifier of the destination chain. + * @param _recipient The address of the recipient on the destination chain. + * @param _amountOrId The amount or identifier of tokens to be sent to the remote recipient. + * @return messageId The identifier of the dispatched message. + */ + function transferRemote( + uint32 _destination, + bytes32 _recipient, + uint256 _amountOrId + ) external payable virtual returns (bytes32 messageId) { + return + _transferRemote(_destination, _recipient, _amountOrId, msg.value); + } + + /** + * @notice Transfers `_amountOrId` token to `_recipient` on `_destination` domain with a specified hook + * @dev Delegates transfer logic to `_transferFromSender` implementation. + * @dev The metadata is the token metadata, and is DIFFERENT than the hook metadata. + * @dev Emits `SentTransferRemote` event on the origin chain. + * @param _destination The identifier of the destination chain. + * @param _recipient The address of the recipient on the destination chain. + * @param _amountOrId The amount or identifier of tokens to be sent to the remote recipient. + * @param _hookMetadata The metadata passed into the hook + * @param _hook The post dispatch hook to be called by the Mailbox + * @return messageId The identifier of the dispatched message. + */ + function transferRemote( + uint32 _destination, + bytes32 _recipient, + uint256 _amountOrId, + bytes calldata _hookMetadata, + address _hook + ) external payable virtual returns (bytes32 messageId) { + return + _transferRemote( + _destination, + _recipient, + _amountOrId, + msg.value, + _hookMetadata, + _hook + ); + } + + function _transferRemote( + uint32 _destination, + bytes32 _recipient, + uint256 _amountOrId, + uint256 _value + ) internal returns (bytes32 messageId) { + return + _transferRemote( + _destination, + _recipient, + _amountOrId, + _value, + _GasRouter_hookMetadata(_destination), + address(hook) + ); + } + + function _transferRemote( + uint32 _destination, + bytes32 _recipient, + uint256 _amountOrId, + uint256 _value, + bytes memory _hookMetadata, + address _hook + ) internal virtual returns (bytes32 messageId) { + bytes memory _tokenMetadata = _transferFromSender(_amountOrId); + bytes memory _tokenMessage = TokenMessage.format( + _recipient, + _amountOrId, + _tokenMetadata + ); + + messageId = _Router_dispatch( + _destination, + _value, + _tokenMessage, + _hookMetadata, + _hook + ); + + emit SentTransferRemote(_destination, _recipient, _amountOrId); + } + + /** + * @dev Should transfer `_amountOrId` of tokens from `msg.sender` to this token router. + * @dev Called by `transferRemote` before message dispatch. + * @dev Optionally returns `metadata` associated with the transfer to be passed in message. + */ + function _transferFromSender( + uint256 _amountOrId + ) internal virtual returns (bytes memory metadata); + + /** + * @notice Returns the balance of `account` on this token router. + * @param account The address to query the balance of. + * @return The balance of `account`. + */ + function balanceOf(address account) external virtual returns (uint256); + + /** + * @dev Mints tokens to recipient when router receives transfer message. + * @dev Emits `ReceivedTransferRemote` event on the destination chain. + * @param _origin The identifier of the origin chain. + * @param _message The encoded remote transfer message containing the recipient address and amount. + */ + function _handle( + uint32 _origin, + bytes32, + bytes calldata _message + ) internal virtual override { + bytes32 recipient = _message.recipient(); + uint256 amount = _message.amount(); + bytes calldata metadata = _message.metadata(); + _transferTo(recipient.bytes32ToAddress(), amount, metadata); + emit ReceivedTransferRemote(_origin, recipient, amount); + } + + /** + * @dev Should transfer `_amountOrId` of tokens from this token router to `_recipient`. + * @dev Called by `handle` after message decoding. + * @dev Optionally handles `metadata` associated with transfer passed in message. + */ + function _transferTo( + address _recipient, + uint256 _amountOrId, + bytes calldata metadata + ) internal virtual; +} + + +// File contracts/token/HypERC20.sol + +// Original license: SPDX_License_Identifier: Apache-2.0 +pragma solidity >=0.8.0; + +/** + * @title Hyperlane ERC20 Token Router that extends ERC20 with remote transfer functionality. + * @author Abacus Works + * @dev Supply on each chain is not constant but the aggregate supply across all chains is. + */ +contract HypERC20 is ERC20Upgradeable, TokenRouter { + uint8 private immutable _decimals; + + constructor(uint8 __decimals, address _mailbox) TokenRouter(_mailbox) { + _decimals = __decimals; + } + + /** + * @notice Initializes the Hyperlane router, ERC20 metadata, and mints initial supply to deployer. + * @param _totalSupply The initial supply of the token. + * @param _name The name of the token. + * @param _symbol The symbol of the token. + */ + function initialize( + uint256 _totalSupply, + string memory _name, + string memory _symbol, + address _hook, + address _interchainSecurityModule, + address _owner + ) external initializer { + // Initialize ERC20 metadata + __ERC20_init(_name, _symbol); + _mint(msg.sender, _totalSupply); + _MailboxClient_initialize(_hook, _interchainSecurityModule, _owner); + } + + function decimals() public view override returns (uint8) { + return _decimals; + } + + function balanceOf( + address _account + ) + public + view + virtual + override(TokenRouter, ERC20Upgradeable) + returns (uint256) + { + return ERC20Upgradeable.balanceOf(_account); + } + + /** + * @dev Burns `_amount` of token from `msg.sender` balance. + * @inheritdoc TokenRouter + */ + function _transferFromSender( + uint256 _amount + ) internal override returns (bytes memory) { + _burn(msg.sender, _amount); + return bytes(""); // no metadata + } + + /** + * @dev Mints `_amount` of token to `_recipient` balance. + * @inheritdoc TokenRouter + */ + function _transferTo( + address _recipient, + uint256 _amount, + bytes calldata // no metadata + ) internal virtual override { + _mint(_recipient, _amount); + } +} diff --git a/packages/testcases/contracts/erc20.sol b/packages/testcases/contracts/erc20.sol new file mode 100644 index 0000000..af348c1 --- /dev/null +++ b/packages/testcases/contracts/erc20.sol @@ -0,0 +1,554 @@ +// Sources flattened with hardhat v2.12.4 https://hardhat.org + +// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.8.0 + +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Interface of the ERC20 standard as defined in the EIP. + */ +interface IERC20 { + /** + * @dev Emitted when `value` tokens are moved from one account (`from`) to + * another (`to`). + * + * Note that `value` may be zero. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev Emitted when the allowance of a `spender` for an `owner` is set by + * a call to {approve}. `value` is the new allowance. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); + + /** + * @dev Returns the amount of tokens in existence. + */ + function totalSupply() external view returns (uint256); + + /** + * @dev Returns the amount of tokens owned by `account`. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * @dev Moves `amount` tokens from the caller's account to `to`. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transfer(address to, uint256 amount) external returns (bool); + + /** + * @dev Returns the remaining number of tokens that `spender` will be + * allowed to spend on behalf of `owner` through {transferFrom}. This is + * zero by default. + * + * This value changes when {approve} or {transferFrom} are called. + */ + function allowance(address owner, address spender) external view returns (uint256); + + /** + * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * IMPORTANT: Beware that changing an allowance with this method brings the risk + * that someone may use both the old and the new allowance by unfortunate + * transaction ordering. One possible solution to mitigate this race + * condition is to first reduce the spender's allowance to 0 and set the + * desired value afterwards: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * Emits an {Approval} event. + */ + function approve(address spender, uint256 amount) external returns (bool); + + /** + * @dev Moves `amount` tokens from `from` to `to` using the + * allowance mechanism. `amount` is then deducted from the caller's + * allowance. + * + * Returns a boolean value indicating whether the operation succeeded. + * + * Emits a {Transfer} event. + */ + function transferFrom( + address from, + address to, + uint256 amount + ) external returns (bool); +} + + +// File @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol@v4.8.0 + +// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Interface for the optional metadata functions from the ERC20 standard. + * + * _Available since v4.1._ + */ +interface IERC20Metadata is IERC20 { + /** + * @dev Returns the name of the token. + */ + function name() external view returns (string memory); + + /** + * @dev Returns the symbol of the token. + */ + function symbol() external view returns (string memory); + + /** + * @dev Returns the decimals places of the token. + */ + function decimals() external view returns (uint8); +} + + +// File @openzeppelin/contracts/utils/Context.sol@v4.8.0 + +// OpenZeppelin Contracts v4.4.1 (utils/Context.sol) + +pragma solidity ^0.8.0; + +/** + * @dev Provides information about the current execution context, including the + * sender of the transaction and its data. While these are generally available + * via msg.sender and msg.data, they should not be accessed in such a direct + * manner, since when dealing with meta-transactions the account sending and + * paying for execution may not be the actual sender (as far as an application + * is concerned). + * + * This contract is only required for intermediate, library-like contracts. + */ +abstract contract Context { + function _msgSender() internal view virtual returns (address) { + return msg.sender; + } + + function _msgData() internal view virtual returns (bytes calldata) { + return msg.data; + } +} + + +// File @openzeppelin/contracts/token/ERC20/ERC20.sol@v4.8.0 + +// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) + +pragma solidity ^0.8.0; + + + +/** + * @dev Implementation of the {IERC20} interface. + * + * This implementation is agnostic to the way tokens are created. This means + * that a supply mechanism has to be added in a derived contract using {_mint}. + * For a generic mechanism see {ERC20PresetMinterPauser}. + * + * TIP: For a detailed writeup see our guide + * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How + * to implement supply mechanisms]. + * + * We have followed general OpenZeppelin Contracts guidelines: functions revert + * instead returning `false` on failure. This behavior is nonetheless + * conventional and does not conflict with the expectations of ERC20 + * applications. + * + * Additionally, an {Approval} event is emitted on calls to {transferFrom}. + * This allows applications to reconstruct the allowance for all accounts just + * by listening to said events. Other implementations of the EIP may not emit + * these events, as it isn't required by the specification. + * + * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} + * functions have been added to mitigate the well-known issues around setting + * allowances. See {IERC20-approve}. + */ +contract ERC20 is Context, IERC20, IERC20Metadata { + mapping(address => uint256) private _balances; + + mapping(address => mapping(address => uint256)) private _allowances; + + uint256 private _totalSupply; + + string private _name; + string private _symbol; + + /** + * @dev Sets the values for {name} and {symbol}. + * + * The default value of {decimals} is 18. To select a different value for + * {decimals} you should overload it. + * + * All two of these values are immutable: they can only be set once during + * construction. + */ + constructor(string memory name_, string memory symbol_) { + _name = name_; + _symbol = symbol_; + } + + /** + * @dev Returns the name of the token. + */ + function name() public view virtual override returns (string memory) { + return _name; + } + + /** + * @dev Returns the symbol of the token, usually a shorter version of the + * name. + */ + function symbol() public view virtual override returns (string memory) { + return _symbol; + } + + /** + * @dev Returns the number of decimals used to get its user representation. + * For example, if `decimals` equals `2`, a balance of `505` tokens should + * be displayed to a user as `5.05` (`505 / 10 ** 2`). + * + * Tokens usually opt for a value of 18, imitating the relationship between + * Ether and Wei. This is the value {ERC20} uses, unless this function is + * overridden; + * + * NOTE: This information is only used for _display_ purposes: it in + * no way affects any of the arithmetic of the contract, including + * {IERC20-balanceOf} and {IERC20-transfer}. + */ + function decimals() public view virtual override returns (uint8) { + return 18; + } + + /** + * @dev See {IERC20-totalSupply}. + */ + function totalSupply() public view virtual override returns (uint256) { + return _totalSupply; + } + + /** + * @dev See {IERC20-balanceOf}. + */ + function balanceOf(address account) public view virtual override returns (uint256) { + return _balances[account]; + } + + /** + * @dev See {IERC20-transfer}. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - the caller must have a balance of at least `amount`. + */ + function transfer(address to, uint256 amount) public virtual override returns (bool) { + address owner = _msgSender(); + _transfer(owner, to, amount); + return true; + } + + /** + * @dev See {IERC20-allowance}. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } + + /** + * @dev See {IERC20-approve}. + * + * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on + * `transferFrom`. This is semantically equivalent to an infinite approval. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, amount); + return true; + } + + /** + * @dev See {IERC20-transferFrom}. + * + * Emits an {Approval} event indicating the updated allowance. This is not + * required by the EIP. See the note at the beginning of {ERC20}. + * + * NOTE: Does not update the allowance if the current allowance + * is the maximum `uint256`. + * + * Requirements: + * + * - `from` and `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + * - the caller must have allowance for ``from``'s tokens of at least + * `amount`. + */ + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual override returns (bool) { + address spender = _msgSender(); + _spendAllowance(from, spender, amount); + _transfer(from, to, amount); + return true; + } + + /** + * @dev Atomically increases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + address owner = _msgSender(); + _approve(owner, spender, allowance(owner, spender) + addedValue); + return true; + } + + /** + * @dev Atomically decreases the allowance granted to `spender` by the caller. + * + * This is an alternative to {approve} that can be used as a mitigation for + * problems described in {IERC20-approve}. + * + * Emits an {Approval} event indicating the updated allowance. + * + * Requirements: + * + * - `spender` cannot be the zero address. + * - `spender` must have allowance for the caller of at least + * `subtractedValue`. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + address owner = _msgSender(); + uint256 currentAllowance = allowance(owner, spender); + require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); + unchecked { + _approve(owner, spender, currentAllowance - subtractedValue); + } + + return true; + } + + /** + * @dev Moves `amount` of tokens from `from` to `to`. + * + * This internal function is equivalent to {transfer}, and can be used to + * e.g. implement automatic token fees, slashing mechanisms, etc. + * + * Emits a {Transfer} event. + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `from` must have a balance of at least `amount`. + */ + function _transfer( + address from, + address to, + uint256 amount + ) internal virtual { + require(from != address(0), "ERC20: transfer from the zero address"); + require(to != address(0), "ERC20: transfer to the zero address"); + + _beforeTokenTransfer(from, to, amount); + + uint256 fromBalance = _balances[from]; + require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); + unchecked { + _balances[from] = fromBalance - amount; + // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by + // decrementing then incrementing. + _balances[to] += amount; + } + + emit Transfer(from, to, amount); + + _afterTokenTransfer(from, to, amount); + } + + /** @dev Creates `amount` tokens and assigns them to `account`, increasing + * the total supply. + * + * Emits a {Transfer} event with `from` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + + _beforeTokenTransfer(address(0), account, amount); + + _totalSupply += amount; + unchecked { + // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. + _balances[account] += amount; + } + emit Transfer(address(0), account, amount); + + _afterTokenTransfer(address(0), account, amount); + } + + /** + * @dev Destroys `amount` tokens from `account`, reducing the + * total supply. + * + * Emits a {Transfer} event with `to` set to the zero address. + * + * Requirements: + * + * - `account` cannot be the zero address. + * - `account` must have at least `amount` tokens. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + uint256 accountBalance = _balances[account]; + require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); + unchecked { + _balances[account] = accountBalance - amount; + // Overflow not possible: amount <= accountBalance <= totalSupply. + _totalSupply -= amount; + } + + emit Transfer(account, address(0), amount); + + _afterTokenTransfer(account, address(0), amount); + } + + /** + * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. + * + * This internal function is equivalent to `approve`, and can be used to + * e.g. set automatic allowances for certain subsystems, etc. + * + * Emits an {Approval} event. + * + * Requirements: + * + * - `owner` cannot be the zero address. + * - `spender` cannot be the zero address. + */ + function _approve( + address owner, + address spender, + uint256 amount + ) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; + emit Approval(owner, spender, amount); + } + + /** + * @dev Updates `owner` s allowance for `spender` based on spent `amount`. + * + * Does not update the allowance amount in case of infinite allowance. + * Revert if not enough allowance is available. + * + * Might emit an {Approval} event. + */ + function _spendAllowance( + address owner, + address spender, + uint256 amount + ) internal virtual { + uint256 currentAllowance = allowance(owner, spender); + if (currentAllowance != type(uint256).max) { + require(currentAllowance >= amount, "ERC20: insufficient allowance"); + unchecked { + _approve(owner, spender, currentAllowance - amount); + } + } + } + + /** + * @dev Hook that is called before any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * will be transferred to `to`. + * - when `from` is zero, `amount` tokens will be minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer( + address from, + address to, + uint256 amount + ) internal virtual {} + + /** + * @dev Hook that is called after any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens + * has been transferred to `to`. + * - when `from` is zero, `amount` tokens have been minted for `to`. + * - when `to` is zero, `amount` of ``from``'s tokens have been burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _afterTokenTransfer( + address from, + address to, + uint256 amount + ) internal virtual {} +} + + +// File contracts/samples/wart.sol + +pragma solidity ^0.8.20; + +contract MyERC20 is ERC20 { + address private deployer; + + constructor() ERC20("MyToken", "mt") { + deployer = msg.sender; + _mint(msg.sender, 100 * 10 ** uint(decimals())); + } + + function isOwner(address user) external view returns (bool result) { + if (user == deployer) { + return true; + } else { + return false; + } + } +} \ No newline at end of file diff --git a/packages/testcases/package.json b/packages/testcases/package.json index 975987e..8f8b481 100644 --- a/packages/testcases/package.json +++ b/packages/testcases/package.json @@ -8,8 +8,8 @@ "aspect:deploy": "npm run aspect:build && node scripts/aspect-deploy.cjs", "aspect:build": "sh build.sh", "aspect:gen": "npx @artela/aspect-tool generate -i ./build/contract -o ./aspect/contract", - "asbuild:debug": "asc aspect/index.ts --target debug", - "asbuild:release": "asc aspect/index.ts --target release", + "asbuild:debug": "asc assembly/index.ts --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__ --target debug", + "asbuild:release": "asc assembly/index.ts --disable bulk-memory --optimize --debug --runtime stub --exportRuntime --exportStart __aspect_start__ --target release", "contract:bind": "node scripts/bind.cjs", "contract:deploy": "node scripts/contract-deploy.cjs", "contract:build": "solc -o ./build/contract/ --via-ir --abi --storage-layout --bin ./contracts/*.sol --overwrite", @@ -21,10 +21,10 @@ "license": "ISC", "dependencies": { "@artela/aspect-libs": "file:../libs", - "@artela/web3": "file:/Users/jack/Projects/js/web3.js/packages/web3/lib", - "@artela/web3-atl-aspect": "file:/Users/jack/Projects/js/web3.js/packages/web3-atl-aspect/lib", - "@artela/web3-utils":"file:/Users/jack/Projects/js/web3.js/packages/web3-utils/lib", - "@artela/web3-core-method":"file:/Users/jack/Projects/js/web3.js/packages/web3-core-method/lib", + "@artela/web3": "^1.9.24", + "@artela/web3-atl-aspect": "^1.9.24", + "@artela/web3-core-method": "^1.9.24", + "@artela/web3-utils": "^1.9.24", "@assemblyscript/loader": "^0.27.5", "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", @@ -33,13 +33,15 @@ }, "devDependencies": { "@artela/aspect-tool": "file:../toolkit", + "@ethersproject/keccak256": "^5.7.0", "@types/mocha": "^10.0.7", "as-proto-gen": "^1.3.0", "assemblyscript": "^0.27.5", "brotli": "^1.3.3", + "ethereumjs-tx": "^2.1.2", + "mocha": "^10.7.3", "solc": "^0.8.26", - "yargs": "^17.7.2", - "@ethersproject/keccak256": "^5.7.0" + "yargs": "^17.7.2" }, "type": "module", "exports": { diff --git a/packages/testcases/tests/testcases/hyper-test.json b/packages/testcases/tests/testcases/hyper-test.json new file mode 100644 index 0000000..f772182 --- /dev/null +++ b/packages/testcases/tests/testcases/hyper-test.json @@ -0,0 +1,77 @@ +{ + "description": "Test bind same aspect with contract and EoA", + "actions": [ + { + "description": "Create new account", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 1 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 1 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Basic Aspect", + "account": "$accounts.0", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.0" + } + ], + "joinPoints": ["PreContractCall", "PostContractCall", "PreTxExecute", "PostTxExecute"], + "code": "#BasicAspectCompressed.bytecode" + }, + "gas": "auto" + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Deploy Contract", + "account": "$accounts.0", + "type": "deployContract", + "options": { + "code": "#HypErc20Contract.bytecode", + "abi": "#HypErc20Contract.abi", + "args": [6, "0x38A02dAEe326Bf4519d7DD647E6B1fcb8659C115"] + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Bind contract with Aspect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": -1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + } + ] +} diff --git a/packages/testcases/tests/testcases/jit-transfer-test.json b/packages/testcases/tests/testcases/jit-transfer-test.json new file mode 100644 index 0000000..3649471 --- /dev/null +++ b/packages/testcases/tests/testcases/jit-transfer-test.json @@ -0,0 +1,249 @@ +{ + "description": "Test Aspect JIT Gaming", + "actions": [ + { + "description": "Create new accounts", + "account": "", + "type": "createAccounts", + "options": { + "fundingAmount": 1, + "accountNumber": 2 + }, + "expect": { + "error": { + "eq": "" + }, + "result.accounts.length": { + "eq": 2 + } + }, + "output": { + "accounts": "result.accounts" + } + }, + { + "description": "Deploy Factory Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#SimpleAccountFactoryContract.bytecode", + "abi": "#SimpleAccountFactoryContract.abi", + "args": ["0x000000000000000000000000000000000000AAEC"] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "factoryAddress": "receipt.contractAddress" + } + }, + { + "description": "Deploy ERC20 Contract", + "account": "", + "type": "deployContract", + "options": { + "code": "#MyERC20Contract.bytecode", + "abi": "#MyERC20Contract.abi", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + }, + "output": { + "contractAddress": "receipt.contractAddress" + } + }, + { + "description": "Call transfer", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "transfer", + "abi": "#MyERC20Contract.abi", + "args": ["0xC26F043B070F6622f7E825a751d4d7E1dAB70394", 100], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Deploy JIT Transfer Aspect", + "account": "$accounts.1", + "type": "deployAspect", + "options": { + "args": { + "properties": [ + { + "key": "owner", + "value": "$accounts.1" + } + ], + "joinPoints": ["PostContractCall"], + "code": "#JITTransferAspect.bytecode" + }, + "gas": "2000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + }, + "output": { + "aspectId": "receipt.aspectAddress" + } + }, + { + "description": "Bind ERC20 Contract with Jit Transfer Apsect", + "account": "", + "type": "bind", + "options": { + "aspect": "$aspectId", + "account": "$contractAddress", + "version": 1, + "priority": 1, + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": "" + } + }, + { + "description": "Call factory contract and create AA", + "account": "", + "type": "callContract", + "options": { + "contract": "$factoryAddress", + "method": "createAccount", + "abi": "#SimpleAccountFactoryContract.abi", + "args": ["$accounts.0", 1], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call factory contract and get AA address", + "account": "", + "type": "callContract", + "options": { + "contract": "$factoryAddress", + "method": "getAddress", + "abi": "#SimpleAccountFactoryContract.abi", + "args": ["$accounts.0", 1], + "gas": "10000000", + "isCall": true + }, + "expect": { + "error": { + "eq": "" + } + }, + "output": { + "walletAddr": "result.ret" + } + }, + { + "description": "Tansfer Token to AA address", + "account": "", + "type": "transfer", + "options": { + "to": "$walletAddr", + "amount": "1" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "AA wallet Approve Aspect", + "account": "$accounts.0", + "type": "callContract", + "options": { + "contract": "$walletAddr", + "method": "approveAspects", + "abi": "#SimpleAccountContract.abi", + "args": [["$aspectId"]], + "gas": "10000000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Register Owner", + "account": "", + "type": "callOperation", + "options": { + "aspectID": "$aspectId", + "operationData": "0x0001$walletAddr", + "version": 1, + "gas":"2000000", + "args": [] + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Call transfer", + "account": "", + "type": "callContract", + "options": { + "contract": "$contractAddress", + "method": "transfer", + "abi": "#MyERC20Contract.abi", + "args": ["0xC26F043B070F6622f7E825a751d4d7E1dAB70394", 100], + "gas": "300000" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + } + ] + } + \ No newline at end of file diff --git a/packages/testcases/tests/testcases/sources.json b/packages/testcases/tests/testcases/sources.json index 84d9cd9..5869c5e 100644 --- a/packages/testcases/tests/testcases/sources.json +++ b/packages/testcases/tests/testcases/sources.json @@ -483,5 +483,39 @@ "type": "contract", "src": "event.sol", "contractName": "Event" + }, + { + "name": "HypErc20Contract", + "description": "HypErc20", + "type": "contract", + "src": "HypERC20.sol", + "contractName": "HypERC20" + }, + { + "name": "MyERC20Contract", + "description": "ERC20 token", + "type": "contract", + "src": "erc20.sol", + "contractName": "MyERC20" + }, + { + "name": "JITTransferAspect", + "description": "jit transfer aspect Test", + "type": "aspect", + "src": "jit-transfer.ts", + "compileOptions": { + "compress": true, + "args": [ + "--disable", + "bulk-memory", + "--runtime", + "stub", + "--exportRuntime", + "--exportStart", + "__aspect_start__", + "-O3", + "--noAssert" + ] + } } ] From 73501aa3d7e087622796bfdeb5112be953517dc8 Mon Sep 17 00:00:00 2001 From: zhanjunmap Date: Wed, 4 Dec 2024 10:03:54 +0800 Subject: [PATCH 15/17] fix:test error --- packages/testcases/aspect/jit-transfer.ts | 66 +- packages/testcases/package-lock.json | 5101 +++++++++++++++-- packages/testcases/package.json | 1 + .../tests/testcases/jit-transfer-test.json | 54 +- 4 files changed, 4863 insertions(+), 359 deletions(-) diff --git a/packages/testcases/aspect/jit-transfer.ts b/packages/testcases/aspect/jit-transfer.ts index 988e889..9bd56f0 100644 --- a/packages/testcases/aspect/jit-transfer.ts +++ b/packages/testcases/aspect/jit-transfer.ts @@ -15,7 +15,7 @@ import { sys, uint8ArrayToHex, uint8ArrayToString, - InitInput, + InitInput, IPreContractCallJP, PreContractCallInput, JitInherentRequest, } from "@artela/aspect-libs"; import { Protobuf } from "as-proto/assembly/Protobuf"; @@ -32,38 +32,44 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation static readonly PAYER_KEY: string = 'PAYER_KEY'; static readonly ENTRYPOINT_ADDRESS: string = '0x000000000000000000000000000000000000AAEC'; - static readonly TRANSFER_AMOUNT: u64 = 1; + static readonly TRANSFER_AMOUNT: u64 =100_000_000_000_000_000; init(input: InitInput): void { } postContractCall(input: PostContractCallInput): void { sys.log("_____postContractCall"); - let calldata = uint8ArrayToHex(input.call!.data); - let method = this.parseCallMethod(calldata); - - const payer = this.getPayer(); - const to = this.getTransferAddress(calldata); - const transferCalldata = ethereum.abiEncode('execute', [ - ethereum.Address.fromHexString(to), - ethereum.Number.fromU64(JITTransferAspect.TRANSFER_AMOUNT, 64), - ethereum.Bytes.fromHexString('0x') - ]); - - sys.log(`_____Joinpoint postContractCall, method: ${method}, payer: ${payer}, receiver: ${to}`); + const callData = uint8ArrayToHex(input.call!.data); + const method = this.parseCallMethod(callData); + + // if method is 'transfer(address,uint256)' if (method == "0xa9059cbb") { sys.log(`_____submit jit call`); - let request = JitCallBuilder.simple( + + const payer = this.getPayer(); // 这里的 payer 应该是 Aspect id吗? + const to = this.getTransferAddress(callData); + sys.log(`_____submit jit call to ${to} from ${payer}`); + + // 构造AA调用的 user operation,感觉这里好像有问题? + const transferCalldata = ethereum.abiEncode('execute', [ + ethereum.Address.fromUint8Array(hexToUint8Array(to)), + ethereum.Number.fromU64(JITTransferAspect.TRANSFER_AMOUNT, 64), + ethereum.Bytes.fromUint8Array(hexToUint8Array("")), + ]); + + sys.log(`_____Joinpoint postContractCall, method: ${method}, payer: ${payer}, receiver: ${to}`); + + const request = JitCallBuilder.simple( hexToUint8Array(payer), hexToUint8Array(JITTransferAspect.ENTRYPOINT_ADDRESS), hexToUint8Array(transferCalldata) ).build(); - let response = sys.hostApi.evmCall.jitCall(request); - if (!response.success) { - sys.log(`_____Failed to submit the JIT call, err: ${response.errorMsg}, ret: ${uint8ArrayToString(response.ret)}`); - } else { + const response = sys.hostApi.evmCall.jitCall(request); + if (response.success) { sys.log(`_____Successfully submitted the JIT call, ret: ${uint8ArrayToString(response.ret)}`); + } else { + sys.log(`_____Failed to submit the JIT call, err: ${response.errorMsg}, ret: ${uint8ArrayToString(response.ret)}`); } } } @@ -78,7 +84,7 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation return new Uint8Array(0); } if (op == "1001") { - let ret = this.getPayer(); + const ret = this.getPayer(); return stringToUint8Array(ret); } @@ -103,25 +109,25 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation parseOP(calldata: string): string { if (calldata.startsWith('0x')) { return calldata.substring(2, 6); - } else { + } return calldata.substring(0, 4); - } + } parseOPPrams(calldata: string): string { if (calldata.startsWith('0x')) { return calldata.substring(6, calldata.length); - } else { + } return calldata.substring(4, calldata.length); - } + } rmPrefix(data: string): string { if (data.startsWith('0x')) { return data.substring(2, data.length); - } else { + } return data; - } + } registerPayer(params: string): void { @@ -132,13 +138,13 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation sys.require(params.length == 40, "illegal params"); const payer = params.slice(0, 40); - let payerStore = sys.aspect.mutableState.get(storagePrefix); + const payerStore = sys.aspect.mutableState.get(storagePrefix); payerStore.set(hexToUint8Array(payer)); } getPayer(): string { - let payerStore = sys.aspect.mutableState.get(JITTransferAspect.PAYER_KEY); - return uint8ArrayToHex(payerStore.unwrap()); + const payerStore = sys.aspect.mutableState.get(JITTransferAspect.PAYER_KEY); + return '0x' + uint8ArrayToHex(payerStore.unwrap()); } //**************************** @@ -146,7 +152,7 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation //**************************** isOwner(sender: Uint8Array): bool { - return false; + return true; } } diff --git a/packages/testcases/package-lock.json b/packages/testcases/package-lock.json index 6afee61..455d300 100644 --- a/packages/testcases/package-lock.json +++ b/packages/testcases/package-lock.json @@ -9,14 +9,15 @@ "license": "ISC", "dependencies": { "@artela/aspect-libs": "file:../libs", - "@artela/web3": "file:/Users/jack/Projects/js/web3.js/packages/web3/lib", - "@artela/web3-atl-aspect": "file:/Users/jack/Projects/js/web3.js/packages/web3-atl-aspect/lib", - "@artela/web3-core-method": "file:/Users/jack/Projects/js/web3.js/packages/web3-core-method/lib", - "@artela/web3-utils": "file:/Users/jack/Projects/js/web3.js/packages/web3-utils/lib", + "@artela/web3": "^1.9.24", + "@artela/web3-atl-aspect": "^1.9.24", + "@artela/web3-core-method": "^1.9.24", + "@artela/web3-utils": "^1.9.24", "@assemblyscript/loader": "^0.27.5", "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", "bignumber.js": "^9.1.2", + "chai": "^5.1.2", "node-fetch": "^3.3.2" }, "devDependencies": { @@ -26,6 +27,8 @@ "as-proto-gen": "^1.3.0", "assemblyscript": "^0.27.5", "brotli": "^1.3.3", + "ethereumjs-tx": "^2.1.2", + "mocha": "^10.7.3", "solc": "^0.8.26", "yargs": "^17.7.2" } @@ -39,16 +42,18 @@ "../../../artela-web3.js/packages/web3-utils/lib": { "extraneous": true }, - "../../../web3.js/packages/web3-atl-aspect/lib": {}, "../../../web3.js/packages/web3-atl/lib": { "extraneous": true }, - "../../../web3.js/packages/web3-core-method/lib": {}, + "../../../web3.js/packages/web3-core-method/lib": { + "extraneous": true + }, "../../../web3.js/packages/web3-eth/lib": { "extraneous": true }, - "../../../web3.js/packages/web3-utils/lib": {}, - "../../../web3.js/packages/web3/lib": {}, + "../../../web3.js/packages/web3-utils/lib": { + "extraneous": true + }, "../../artela-web3.js/packages/web3-atl/lib": { "extraneous": true }, @@ -80,7 +85,7 @@ }, "../toolkit": { "name": "@artela/aspect-tool", - "version": "0.0.60", + "version": "0.0.62", "dev": true, "license": "ISC", "dependencies": { @@ -127,26 +132,171 @@ "link": true }, "node_modules/@artela/web3": { - "resolved": "../../../web3.js/packages/web3/lib", - "link": true + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3/-/web3-1.9.24.tgz", + "integrity": "sha512-4+l/B4blZhrbf+lRP+gTwYOjIyqW8mnEcr2kvG0Sh0j8pFn0s+CwfNtMnqRA24KH2OvOMpQYdFZik8RqcdcZzw==", + "hasInstallScript": true, + "dependencies": { + "@artela/web3-atl": "1.9.24", + "@artela/web3-core": "1.9.24", + "@artela/web3-eth": "1.9.24", + "@artela/web3-utils": "1.9.24", + "web3-bzz": "1.9.0", + "web3-eth-personal": "1.9.0", + "web3-net": "1.9.0", + "web3-shh": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@artela/web3-atl": { + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-atl/-/web3-atl-1.9.24.tgz", + "integrity": "sha512-tPQBNGgV5bzSt+qHkqEy8jiKoY7LOdL6MGRKcaAYI1j3klBrUx3gpOY6jPTME+1rDgULLz7Xs66z8mApWHqZXg==", + "dependencies": { + "@artela/web3-atl-aspect": "1.9.24", + "@artela/web3-core": "1.9.24", + "@artela/web3-core-method": "1.9.24", + "@artela/web3-eth-contract": "1.9.24", + "@artela/web3-utils": "1.9.24", + "web3-core-helpers": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-eth-abi": "1.9.0", + "web3-eth-accounts": "1.9.0", + "web3-eth-ens": "1.9.0", + "web3-eth-iban": "1.9.0", + "web3-eth-personal": "1.9.0", + "web3-net": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/@artela/web3-atl-aspect": { - "resolved": "../../../web3.js/packages/web3-atl-aspect/lib", - "link": true + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-atl-aspect/-/web3-atl-aspect-1.9.24.tgz", + "integrity": "sha512-yE+AdjSXDFREYX18knH3ewtGbf8HDHnPRi/VrZDuJhLSaLeZoKNwZL452sR8HPr7zvpq6oyje4ZHau62dSXyBA==", + "dependencies": { + "@artela/web3-core": "1.9.24", + "@artela/web3-core-method": "1.9.24", + "@artela/web3-eth-contract": "1.9.24", + "@artela/web3-utils": "1.9.24", + "@types/bn.js": "^5.1.1", + "web3-core-helpers": "1.9.0", + "web3-core-promievent": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-eth-abi": "1.9.0", + "web3-eth-accounts": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@artela/web3-core": { + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-core/-/web3-core-1.9.24.tgz", + "integrity": "sha512-oBvDhOuFSYScFraaFMDNz27AJXgzrrAbXwEZd96lti1Q7BiLMeugwI43w7AyWKdNa09hFfMaWu1D07t9xVOe5g==", + "dependencies": { + "@artela/web3-core-method": "1.9.24", + "@artela/web3-utils": "1.9.24", + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.9.0", + "web3-core-requestmanager": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/@artela/web3-core-method": { - "resolved": "../../../web3.js/packages/web3-core-method/lib", - "link": true + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-core-method/-/web3-core-method-1.9.24.tgz", + "integrity": "sha512-pndoHeX6bpTKAm7kXAog0RgS1G6165fap36Cm+yw9PvrY9tP1QBcz5iMpXMwBxX5cexw0thN+lLzvE4C0NVtwA==", + "dependencies": { + "@artela/web3-utils": "1.9.24", + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.9.0", + "web3-core-promievent": "1.9.0", + "web3-core-subscriptions": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@artela/web3-eth": { + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-eth/-/web3-eth-1.9.24.tgz", + "integrity": "sha512-3IzZkBdCPa1vQYcHq1t7r6J42QmV7SOcTpxtEixsLg5SW1ynTGqhvZfY5hCFrov0wco769NRKIn8Bu5YD18hGQ==", + "dependencies": { + "@artela/web3-core": "1.9.24", + "@artela/web3-core-method": "1.9.24", + "@artela/web3-eth-contract": "1.9.24", + "@artela/web3-utils": "1.9.24", + "web3-core-helpers": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-eth-abi": "1.9.0", + "web3-eth-accounts": "1.9.0", + "web3-eth-ens": "1.9.0", + "web3-eth-iban": "1.9.0", + "web3-eth-personal": "1.9.0", + "web3-net": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@artela/web3-eth-contract": { + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-eth-contract/-/web3-eth-contract-1.9.24.tgz", + "integrity": "sha512-eQa+cP4x5fzE5PZgnpAkf3fXJLPBUpCm5HNXCIO59HNdLY2087zugGOxIFBIgdcY52jeQPjYHak2SgFCfd6iTg==", + "dependencies": { + "@artela/web3-core": "1.9.24", + "@artela/web3-core-method": "1.9.24", + "@artela/web3-utils": "1.9.24", + "@types/bn.js": "^5.1.1", + "web3-core-helpers": "1.9.0", + "web3-core-promievent": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-eth-abi": "1.9.0", + "web3-eth-accounts": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/@artela/web3-utils": { - "resolved": "../../../web3.js/packages/web3-utils/lib", - "link": true + "version": "1.9.24", + "resolved": "https://registry.npmjs.org/@artela/web3-utils/-/web3-utils-1.9.24.tgz", + "integrity": "sha512-+OZpb9HFHlk/cASlzWsZTQmHfkPxT/ex/TovyG/QjVbmTjhDfz4L/lJTftuRg4I4TwciE1ftv+gFF60T0Hy/6g==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } }, "node_modules/@assemblyscript/loader": { "version": "0.27.25", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.27.25.tgz", "integrity": "sha512-o5D5trJEmUS6ghwLLol8PgFeA2z0A/5pgSqahQQiiG/nf4MuFlw6V7ftD9ucaiuy7cc/Bi/zLPjjCdG4/SeyIw==" }, + "node_modules/@ethereumjs/common": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.5.0.tgz", + "integrity": "sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.1" + } + }, "node_modules/@ethereumjs/tx": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-5.1.0.tgz", @@ -261,11 +411,142 @@ "@scure/bip39": "1.2.1" } }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, "node_modules/@ethersproject/bytes": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, "funding": [ { "type": "individual", @@ -280,11 +561,54 @@ "@ethersproject/logger": "^5.7.0" } }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, "node_modules/@ethersproject/keccak256": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, "funding": [ { "type": "individual", @@ -304,7 +628,6 @@ "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true, "funding": [ { "type": "individual", @@ -316,51 +639,197 @@ } ] }, - "node_modules/@noble/curves": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", - "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@noble/hashes": "1.3.1" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "funding": { - "url": "https://paulmillr.com/funding/" + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@scure/bip32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", - "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@noble/curves": "~1.1.0", - "@noble/hashes": "~1.3.1", - "@scure/base": "~1.1.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@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" } }, - "node_modules/@scure/bip39": { - "version": "1.2.1", + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", "dependencies": { @@ -371,12 +840,66 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, "node_modules/@types/humps": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/humps/-/humps-2.0.6.tgz", "integrity": "sha512-Fagm1/a/1J9gDKzGdtlPmmTN5eSw/aaTzHtj740oSfo+MODsSY2WglxMmhTdOglC8nxqUhGGQ+5HfVtBvxo3Kg==", "dev": true }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mocha": { "version": "10.0.7", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", @@ -384,6 +907,76 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.6.tgz", + "integrity": "sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -408,6 +1001,30 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, "node_modules/as-proto": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/as-proto/-/as-proto-1.3.0.tgz", @@ -443,6 +1060,14 @@ "node": ">=12" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, "node_modules/assemblyscript": { "version": "0.27.25", "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.25.tgz", @@ -465,11 +1090,77 @@ "url": "https://opencollective.com/assemblyscript" } }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "devOptional": true, "funding": [ { "type": "github", @@ -485,6 +1176,14 @@ } ] }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, "node_modules/bignumber.js": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", @@ -493,6 +1192,18 @@ "node": "*" } }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/binaryen": { "version": "116.0.0-nightly.20240114", "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", @@ -503,395 +1214,4028 @@ "wasm2js": "bin/wasm2js" } }, - "node_modules/brotli": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.1.2" - } + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/color-convert": { + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true, - "license": "MIT" + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 12" + "dependencies": { + "base64-js": "^1.1.2" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "license": "MIT", - "engines": { - "node": ">= 12" + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "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" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" + "url": "https://github.com/sponsors/feross" }, { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=6.14.2" } }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz", + "integrity": "sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dependencies": { - "fetch-blob": "^3.1.2" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=12.20.0" + "node": ">=12" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/google-protobuf": { - "version": "3.21.2", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", - "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==", - "dev": true + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "engines": { + "node": ">= 16" + } }, - "node_modules/humps": { + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.5.tgz", + "integrity": "sha512-xq7ICKB4TMHUx7Tz1L9O2SGKOhYMOTR32oir45Bq28/AQTpHogKgHcoYFSdRbMtddl+ozNXfXY9jWcgYKmde0w==", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", - "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "peer": true + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "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" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "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" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "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" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==" + }, + "node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-lib/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", + "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.6.1.tgz", + "integrity": "sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "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" + } + }, + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "deprecated": "New package name format for new versions: @ethereumjs/common. Please update.", + "dev": true + }, + "node_modules/ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "dev": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-tx/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-tx/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, + "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "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" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==" + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/form-data-encoder": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.1.tgz", + "integrity": "sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==" + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/google-protobuf": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", + "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-12.1.0.tgz", + "integrity": "sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "@szmarczak/http-timer": "^5.0.1", + "@types/cacheable-request": "^6.0.2", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^6.0.4", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "form-data-encoder": "1.7.1", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/humps": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz", + "integrity": "sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g==", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==" + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", + "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.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.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/multihashes/node_modules/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "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" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.13.0.tgz", + "integrity": "sha512-BFwmFXiJoFqlUpZ5Qssolv15DMyc84gTBds1BjsV1BfXEo1UyyD7GsmN67n7J77uRhoSNW1AXtXKPLcBFQn9Aw==", + "dependencies": { + "punycode": "^2.3.1" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/responselike/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/secp256k1/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/secp256k1/node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "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" + } + }, + "node_modules/secp256k1/node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solc": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "^8.1.0", + "follow-redirects": "^1.12.1", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solc.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/swarm-js": { + "version": "0.1.42", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.42.tgz", + "integrity": "sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==", + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^11.8.5", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swarm-js/node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/swarm-js/node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/swarm-js/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "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" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true + "node_modules/web3-bzz": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.9.0.tgz", + "integrity": "sha512-9Zli9dikX8GdHwBb5/WPzpSVuy3EWMKY3P4EokCQra31fD7DLizqAAaTUsFwnK7xYkw5ogpHgelw9uKHHzNajg==", + "hasInstallScript": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "12.1.0", + "swarm-js": "^0.1.40" + }, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, + "node_modules/web3-core": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.9.0.tgz", + "integrity": "sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w==", "dependencies": { - "universalify": "^2.0.0" + "@types/bn.js": "^5.1.1", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.9.0", + "web3-core-method": "1.9.0", + "web3-core-requestmanager": "1.9.0", + "web3-utils": "1.9.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", - "dev": true + "node_modules/web3-core-helpers": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.9.0.tgz", + "integrity": "sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg==", + "dependencies": { + "web3-eth-iban": "1.9.0", + "web3-utils": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, + "node_modules/web3-core-method": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.9.0.tgz", + "integrity": "sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w==", + "dependencies": { + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.9.0", + "web3-core-promievent": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-utils": "1.9.0" + }, "engines": { - "node": ">= 0.10.0" + "node": ">=8.0.0" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", + "node_modules/web3-core-promievent": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.9.0.tgz", + "integrity": "sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ==", + "dependencies": { + "eventemitter3": "4.0.4" + }, "engines": { - "node": ">=10.5.0" + "node": ">=8.0.0" } }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "license": "MIT", + "node_modules/web3-core-requestmanager": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.9.0.tgz", + "integrity": "sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q==", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "util": "^0.12.5", + "web3-core-helpers": "1.9.0", + "web3-providers-http": "1.9.0", + "web3-providers-ipc": "1.9.0", + "web3-providers-ws": "1.9.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.9.0.tgz", + "integrity": "sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA==", + "dependencies": { + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.9.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", + "node_modules/web3-eth-abi": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.9.0.tgz", + "integrity": "sha512-0BLQ3FKMrzJkA930jOX3fMaybAyubk06HChclLpiR0NWmgWXm1tmBrJdkyRy2ZTZpmfuZc9xTFRfl0yZID1voA==", + "dependencies": { + "@ethersproject/abi": "^5.6.3", + "web3-utils": "1.9.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, + "node_modules/web3-eth-accounts": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.9.0.tgz", + "integrity": "sha512-VeIZVevmnSll0AC1k5F/y398ZE89d1SRuYk8IewLUhL/tVAsFEsjl2SGgm0+aDcHmgPrkW+qsCJ+C7rWg/N4ZA==", + "dependencies": { + "@ethereumjs/common": "2.5.0", + "@ethereumjs/tx": "3.3.2", + "eth-lib": "0.2.8", + "ethereumjs-util": "^7.1.5", + "scrypt-js": "^3.0.1", + "uuid": "^9.0.0", + "web3-core": "1.9.0", + "web3-core-helpers": "1.9.0", + "web3-core-method": "1.9.0", + "web3-utils": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/@ethereumjs/tx": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", + "integrity": "sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==", + "dependencies": { + "@ethereumjs/common": "^2.5.0", + "ethereumjs-util": "^7.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/web3-eth-accounts/node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { - "prettier": "bin-prettier.js" + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.9.0.tgz", + "integrity": "sha512-+j26hpSaEtAdUed0TN5rnc+YZOcjPxMjFX4ZBKatvFkImdbVv/tzTvcHlltubSpgb2ZLyZ89lSL6phKYwd2zNQ==", + "dependencies": { + "@types/bn.js": "^5.1.1", + "web3-core": "1.9.0", + "web3-core-helpers": "1.9.0", + "web3-core-method": "1.9.0", + "web3-core-promievent": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-eth-abi": "1.9.0", + "web3-utils": "1.9.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.9.0.tgz", + "integrity": "sha512-LOJZeN+AGe9arhuExnrPPFYQr4WSxXEkpvYIlst/joOEUNLDwfndHnJIK6PI5mXaYSROBtTx6erv+HupzGo7vA==", + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "web3-core": "1.9.0", + "web3-core-helpers": "1.9.0", + "web3-core-promievent": "1.9.0", + "web3-eth-abi": "1.9.0", + "web3-eth-contract": "1.9.0", + "web3-utils": "1.9.0" }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, + "node_modules/web3-eth-iban": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.9.0.tgz", + "integrity": "sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog==", + "dependencies": { + "bn.js": "^5.2.1", + "web3-utils": "1.9.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node_modules/web3-eth-personal": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.9.0.tgz", + "integrity": "sha512-r9Ldo/luBqJlv1vCUEQnUS+C3a3ZdbYxVHyfDkj6RWMyCqqo8JE41HWE+pfa0RmB1xnGL2g8TbYcHcqItck/qg==", + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.9.0", + "web3-core-helpers": "1.9.0", + "web3-core-method": "1.9.0", + "web3-net": "1.9.0", + "web3-utils": "1.9.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "dev": true, - "license": "MIT", + "node_modules/web3-net": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.9.0.tgz", + "integrity": "sha512-L+fDZFgrLM5Y15aonl2q6L+RvfaImAngmC0Jv45hV2FJ5IfRT0/2ob9etxZmvEBWvOpbqSvghfOhJIT3XZ37Pg==", "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" + "web3-core": "1.9.0", + "web3-core-method": "1.9.0", + "web3-utils": "1.9.0" }, - "bin": { - "solcjs": "solc.js" + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.9.0.tgz", + "integrity": "sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ==", + "dependencies": { + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.9.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/web3-providers-ipc": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.9.0.tgz", + "integrity": "sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "oboe": "2.1.5", + "web3-core-helpers": "1.9.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/web3-providers-ws": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.9.0.tgz", + "integrity": "sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w==", "dependencies": { - "ansi-regex": "^5.0.1" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.9.0", + "websocket": "^1.0.32" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", + "node_modules/web3-shh": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.9.0.tgz", + "integrity": "sha512-bIBZlralgz4ICCrwkefB2nPPJWfx28NuHIpjB7d9ADKynElubQuqudYhKtSEkKXACuME/BJm0pIFJcJs/gDnMg==", + "hasInstallScript": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "web3-core": "1.9.0", + "web3-core-method": "1.9.0", + "web3-core-subscriptions": "1.9.0", + "web3-net": "1.9.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8.0.0" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, + "node_modules/web3-utils": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", + "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", + "dependencies": { + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=8.0.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, "engines": { - "node": ">= 8" + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -909,6 +5253,67 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/ws/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -918,6 +5323,19 @@ "node": ">=10" } }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -944,6 +5362,33 @@ "engines": { "node": ">=12" } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/packages/testcases/package.json b/packages/testcases/package.json index 8f8b481..cc6021c 100644 --- a/packages/testcases/package.json +++ b/packages/testcases/package.json @@ -29,6 +29,7 @@ "@ethereumjs/tx": "^5.1.0", "as-proto": "^1.3.0", "bignumber.js": "^9.1.2", + "chai": "^5.1.2", "node-fetch": "^3.3.2" }, "devDependencies": { diff --git a/packages/testcases/tests/testcases/jit-transfer-test.json b/packages/testcases/tests/testcases/jit-transfer-test.json index 3649471..b386e30 100644 --- a/packages/testcases/tests/testcases/jit-transfer-test.json +++ b/packages/testcases/tests/testcases/jit-transfer-test.json @@ -21,6 +21,40 @@ "accounts": "result.accounts" } }, + { + "description": "Tansfer Token to AA address", + "account": "", + "type": "transfer", + "options": { + "to": "$accounts.0", + "amount": "10" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, + { + "description": "Tansfer Token to AA address", + "account": "", + "type": "transfer", + "options": { + "to": "$accounts.1", + "amount": "10" + }, + "expect": { + "receipt.status": { + "eq": true + }, + "error": { + "eq": "" + } + } + }, { "description": "Deploy Factory Contract", "account": "", @@ -167,6 +201,7 @@ "walletAddr": "result.ret" } }, + { "description": "Tansfer Token to AA address", "account": "", @@ -224,6 +259,23 @@ } } }, + { + "description": "eth_getBalance by account without balance", + "account": "", + "type": "jsonRPC", + "options": { + "method": "eth_getBalance", + "params": ["$walletAddr", "latest"] + }, + "expect": { + "result.ret": { + "eq": "0xde0b6b3a7640000" + }, + "error": { + "eq": "" + } + } + }, { "description": "Call transfer", "account": "", @@ -233,7 +285,7 @@ "method": "transfer", "abi": "#MyERC20Contract.abi", "args": ["0xC26F043B070F6622f7E825a751d4d7E1dAB70394", 100], - "gas": "300000" + "gas": "2000000" }, "expect": { "receipt.status": { From 42aeb696ea4aad288b9ceb8b4f98f48de2a75bf5 Mon Sep 17 00:00:00 2001 From: zhanjunmap Date: Mon, 9 Dec 2024 12:13:57 +0800 Subject: [PATCH 16/17] fix:test error --- packages/testcases/aspect/jit-transfer.ts | 21 ++++++++++++------- .../tests/testcases/jit-transfer-test.json | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/testcases/aspect/jit-transfer.ts b/packages/testcases/aspect/jit-transfer.ts index 9bd56f0..5bacde7 100644 --- a/packages/testcases/aspect/jit-transfer.ts +++ b/packages/testcases/aspect/jit-transfer.ts @@ -31,8 +31,6 @@ import { Protobuf } from "as-proto/assembly/Protobuf"; export class JITTransferAspect implements IPostContractCallJP, IAspectOperation { static readonly PAYER_KEY: string = 'PAYER_KEY'; - static readonly ENTRYPOINT_ADDRESS: string = '0x000000000000000000000000000000000000AAEC'; - static readonly TRANSFER_AMOUNT: u64 =100_000_000_000_000_000; init(input: InitInput): void { } @@ -50,20 +48,27 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation const to = this.getTransferAddress(callData); sys.log(`_____submit jit call to ${to} from ${payer}`); + // 构造AA调用的 user operation,感觉这里好像有问题? - const transferCalldata = ethereum.abiEncode('execute', [ + + const calldata = ethereum.abiEncode('execute', [ ethereum.Address.fromUint8Array(hexToUint8Array(to)), - ethereum.Number.fromU64(JITTransferAspect.TRANSFER_AMOUNT, 64), + ethereum.Number.fromU64(1_000_000_000_000_000), ethereum.Bytes.fromUint8Array(hexToUint8Array("")), ]); sys.log(`_____Joinpoint postContractCall, method: ${method}, payer: ${payer}, receiver: ${to}`); - const request = JitCallBuilder.simple( + const request = new JitInherentRequest( hexToUint8Array(payer), - hexToUint8Array(JITTransferAspect.ENTRYPOINT_ADDRESS), - hexToUint8Array(transferCalldata) - ).build(); + 0, + hexToUint8Array(''), + new Uint8Array(0), + hexToUint8Array(calldata), + 0, + 0, + new Uint8Array(0) + ); const response = sys.hostApi.evmCall.jitCall(request); if (response.success) { diff --git a/packages/testcases/tests/testcases/jit-transfer-test.json b/packages/testcases/tests/testcases/jit-transfer-test.json index b386e30..4d30a1f 100644 --- a/packages/testcases/tests/testcases/jit-transfer-test.json +++ b/packages/testcases/tests/testcases/jit-transfer-test.json @@ -284,7 +284,7 @@ "contract": "$contractAddress", "method": "transfer", "abi": "#MyERC20Contract.abi", - "args": ["0xC26F043B070F6622f7E825a751d4d7E1dAB70394", 100], + "args": ["0xC26F043B070F6622f7E825a751d4d7E1dAB70394", 1000000], "gas": "2000000" }, "expect": { From 9e3f2c1b4d86437be51aeabc3b937b92401df3b3 Mon Sep 17 00:00:00 2001 From: zhanjunmap Date: Mon, 9 Dec 2024 13:31:41 +0800 Subject: [PATCH 17/17] fix: clean log print --- packages/testcases/aspect/jit-transfer.ts | 44 +++++++++-------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/packages/testcases/aspect/jit-transfer.ts b/packages/testcases/aspect/jit-transfer.ts index 5bacde7..61b064b 100644 --- a/packages/testcases/aspect/jit-transfer.ts +++ b/packages/testcases/aspect/jit-transfer.ts @@ -17,7 +17,7 @@ import { uint8ArrayToString, InitInput, IPreContractCallJP, PreContractCallInput, JitInherentRequest, } from "@artela/aspect-libs"; -import { Protobuf } from "as-proto/assembly/Protobuf"; +import {Protobuf} from "as-proto/assembly/Protobuf"; /** * There are two types of Aspect: Transaction-Level Aspect and Block-Level Aspect. @@ -31,40 +31,38 @@ import { Protobuf } from "as-proto/assembly/Protobuf"; export class JITTransferAspect implements IPostContractCallJP, IAspectOperation { static readonly PAYER_KEY: string = 'PAYER_KEY'; + static readonly GAS_AMOUNT: u64 = 1_000_000_000_000_000; + + + init(input: InitInput): void { + } - init(input: InitInput): void { } postContractCall(input: PostContractCallInput): void { - sys.log("_____postContractCall"); const callData = uint8ArrayToHex(input.call!.data); const method = this.parseCallMethod(callData); // if method is 'transfer(address,uint256)' if (method == "0xa9059cbb") { - sys.log(`_____submit jit call`); const payer = this.getPayer(); // 这里的 payer 应该是 Aspect id吗? const to = this.getTransferAddress(callData); - sys.log(`_____submit jit call to ${to} from ${payer}`); - // 构造AA调用的 user operation,感觉这里好像有问题? - const calldata = ethereum.abiEncode('execute', [ + const executeData = ethereum.abiEncode('execute', [ ethereum.Address.fromUint8Array(hexToUint8Array(to)), - ethereum.Number.fromU64(1_000_000_000_000_000), + ethereum.Number.fromU64(JITTransferAspect.GAS_AMOUNT), ethereum.Bytes.fromUint8Array(hexToUint8Array("")), ]); - sys.log(`_____Joinpoint postContractCall, method: ${method}, payer: ${payer}, receiver: ${to}`); - const request = new JitInherentRequest( hexToUint8Array(payer), 0, hexToUint8Array(''), new Uint8Array(0), - hexToUint8Array(calldata), + hexToUint8Array(executeData), 0, 0, new Uint8Array(0) @@ -72,9 +70,9 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation const response = sys.hostApi.evmCall.jitCall(request); if (response.success) { - sys.log(`_____Successfully submitted the JIT call, ret: ${uint8ArrayToString(response.ret)}`); + sys.log(`_____Successfully submitted the JIT call, payer: ${payer}, receiver: ${to} ret: ${uint8ArrayToString(response.ret)}`); } else { - sys.log(`_____Failed to submit the JIT call, err: ${response.errorMsg}, ret: ${uint8ArrayToString(response.ret)}`); + sys.log(`_____Failed to submit the JIT call, payer: ${payer}, receiver: ${to} err: ${response.errorMsg}, ret: ${uint8ArrayToString(response.ret)}`); } } } @@ -114,25 +112,17 @@ export class JITTransferAspect implements IPostContractCallJP, IAspectOperation parseOP(calldata: string): string { if (calldata.startsWith('0x')) { return calldata.substring(2, 6); - } - return calldata.substring(0, 4); - + } + return calldata.substring(0, 4); + } parseOPPrams(calldata: string): string { if (calldata.startsWith('0x')) { return calldata.substring(6, calldata.length); - } - return calldata.substring(4, calldata.length); - - } + } + return calldata.substring(4, calldata.length); - rmPrefix(data: string): string { - if (data.startsWith('0x')) { - return data.substring(2, data.length); - } - return data; - } registerPayer(params: string): void { @@ -167,4 +157,4 @@ entryPoint.setAspect(aspect) entryPoint.setOperationAspect(aspect) // 3.must export it -export { execute, allocate } \ No newline at end of file +export {execute, allocate} \ No newline at end of file