From 5b954a9dcd54672ada205bbe7aef1ec5c7dee77f Mon Sep 17 00:00:00 2001 From: Nabarun Gogoi Date: Mon, 14 Oct 2024 12:34:23 +0530 Subject: [PATCH] Generate watcher using codegen (#1) * Generate watcher * Update config toml for filecoin subgraph watcher * Update readme with subgraph link --- .eslintignore | 2 + .eslintrc.json | 28 + .gitignore | 8 + .husky/pre-commit | 4 + .npmrc | 1 + LICENSE | 661 ++ README.md | 222 + codegen-config.yml | 36 + environments/local.toml | 123 + package.json | 78 + src/artifacts/BundleRegistry.json | 432 + src/artifacts/DynamicJob.json | 363 + src/artifacts/GasVault.json | 453 + src/artifacts/KeeperRegistry.json | 518 ++ src/artifacts/Orchestrator.json | 491 ++ src/artifacts/StrategyRegistry.json | 1142 +++ src/artifacts/Vault.json | 1171 +++ src/artifacts/VaultRegistry.json | 1074 +++ src/artifacts/WhitelistRegistry.json | 165 + src/cli/checkpoint-cmds/create.ts | 44 + src/cli/checkpoint-cmds/verify.ts | 40 + src/cli/checkpoint.ts | 39 + src/cli/export-state.ts | 38 + src/cli/import-state.ts | 39 + src/cli/index-block.ts | 38 + src/cli/inspect-cid.ts | 38 + src/cli/reset-cmds/job-queue.ts | 22 + src/cli/reset-cmds/state.ts | 24 + src/cli/reset-cmds/watcher.ts | 37 + src/cli/reset.ts | 24 + src/cli/watch-contract.ts | 38 + src/client.ts | 55 + src/database.ts | 329 + src/entity/ActionFailure.ts | 34 + src/entity/BlockProgress.ts | 48 + src/entity/Bundle.ts | 52 + src/entity/Contract.ts | 27 + src/entity/Creator.ts | 35 + src/entity/CreatorWithdrawal.ts | 35 + src/entity/Depositor.ts | 64 + src/entity/Event.ts | 53 + src/entity/FrothyEntity.ts | 21 + src/entity/Job.ts | 55 + src/entity/JobExecution.ts | 43 + src/entity/JobGasDeposited.ts | 34 + src/entity/JobGasWithdrawn.ts | 34 + src/entity/Keeper.ts | 35 + src/entity/LeaderBoard.ts | 37 + src/entity/LiquiditySteer.ts | 34 + src/entity/OrchestratorAction.ts | 55 + src/entity/OrchestratorReward.ts | 40 + src/entity/OrchestratorRewardSnapshot.ts | 37 + src/entity/OrchestratorRewardTracker.ts | 28 + src/entity/PermissionUpdate.ts | 34 + src/entity/PrevAnnualVaultSnapshot.ts | 49 + src/entity/PrevDailyVaultSnapshot.ts | 49 + src/entity/PrevMonthlyVaultSnapshot.ts | 49 + src/entity/PrevVaultSnapshot.ts | 49 + src/entity/PrevWeeklyVaultSnapshot.ts | 59 + src/entity/QueueTimeline.ts | 34 + src/entity/Runner.ts | 31 + src/entity/State.ts | 31 + src/entity/StateSyncStatus.ts | 17 + src/entity/Strategy.ts | 40 + src/entity/Subscriber.ts | 21 + src/entity/SyncStatus.ts | 45 + src/entity/Vault.ts | 158 + src/entity/VaultBeacon.ts | 43 + src/entity/VaultDeposit.ts | 62 + src/entity/VaultGasDeposited.ts | 37 + src/entity/VaultGasUsed.ts | 37 + src/entity/VaultGasWithdrawn.ts | 37 + src/entity/VaultPosition.ts | 40 + src/entity/VaultSnapshot.ts | 62 + src/entity/VaultStateChanged.ts | 34 + src/entity/VaultTransfer.ts | 40 + src/entity/VaultWithdraw.ts | 56 + src/entity/Vote.ts | 34 + src/entity/WhiteListManager.ts | 34 + src/entity/WhiteListVaultPermission.ts | 40 + src/fill.ts | 48 + src/gql/index.ts | 3 + src/gql/mutations/index.ts | 4 + src/gql/mutations/watchContract.gql | 3 + src/gql/queries/_meta.gql | 11 + src/gql/queries/actionFailure.gql | 19 + src/gql/queries/actionFailures.gql | 19 + src/gql/queries/bundle.gql | 14 + src/gql/queries/bundles.gql | 14 + src/gql/queries/creator.gql | 20 + src/gql/queries/creatorWithdrawal.gql | 13 + src/gql/queries/creatorWithdrawals.gql | 13 + src/gql/queries/creators.gql | 20 + src/gql/queries/depositor.gql | 63 + src/gql/queries/depositors.gql | 63 + src/gql/queries/events.gql | 208 + src/gql/queries/eventsInRange.gql | 208 + src/gql/queries/getState.gql | 15 + src/gql/queries/getStateByCID.gql | 15 + src/gql/queries/getSyncStatus.gql | 12 + src/gql/queries/index.ts | 87 + src/gql/queries/job.gql | 68 + src/gql/queries/jobExecution.gql | 22 + src/gql/queries/jobExecutions.gql | 22 + src/gql/queries/jobGasDeposited.gql | 8 + src/gql/queries/jobGasDepositeds.gql | 8 + src/gql/queries/jobGasWithdrawn.gql | 8 + src/gql/queries/jobGasWithdrawns.gql | 8 + src/gql/queries/jobs.gql | 68 + src/gql/queries/keeper.gql | 30 + src/gql/queries/keepers.gql | 30 + src/gql/queries/leaderBoard.gql | 9 + src/gql/queries/leaderBoards.gql | 9 + src/gql/queries/liquiditySteer.gql | 53 + src/gql/queries/liquiditySteers.gql | 53 + src/gql/queries/orchestratorAction.gql | 29 + src/gql/queries/orchestratorActions.gql | 29 + src/gql/queries/orchestratorReward.gql | 13 + .../queries/orchestratorRewardSnapshot.gql | 9 + .../queries/orchestratorRewardSnapshots.gql | 9 + src/gql/queries/orchestratorRewardTracker.gql | 13 + .../queries/orchestratorRewardTrackers.gql | 13 + src/gql/queries/orchestratorRewards.gql | 13 + src/gql/queries/permissionUpdate.gql | 13 + src/gql/queries/permissionUpdates.gql | 13 + src/gql/queries/prevAnnualVaultSnapshot.gql | 58 + src/gql/queries/prevAnnualVaultSnapshots.gql | 58 + src/gql/queries/prevDailyVaultSnapshot.gql | 58 + src/gql/queries/prevDailyVaultSnapshots.gql | 58 + src/gql/queries/prevMonthlyVaultSnapshot.gql | 58 + src/gql/queries/prevMonthlyVaultSnapshots.gql | 58 + src/gql/queries/prevVaultSnapshot.gql | 58 + src/gql/queries/prevVaultSnapshots.gql | 58 + src/gql/queries/prevWeeklyVaultSnapshot.gql | 61 + src/gql/queries/prevWeeklyVaultSnapshots.gql | 61 + src/gql/queries/queueTimeline.gql | 13 + src/gql/queries/queueTimelines.gql | 13 + src/gql/queries/runner.gql | 7 + src/gql/queries/runners.gql | 7 + src/gql/queries/strategies.gql | 61 + src/gql/queries/strategy.gql | 61 + src/gql/queries/vault.gql | 114 + src/gql/queries/vaultBeacon.gql | 11 + src/gql/queries/vaultBeacons.gql | 11 + src/gql/queries/vaultDeposit.gql | 62 + src/gql/queries/vaultDeposits.gql | 62 + src/gql/queries/vaultGasDeposited.gql | 9 + src/gql/queries/vaultGasDepositeds.gql | 9 + src/gql/queries/vaultGasUsed.gql | 9 + src/gql/queries/vaultGasUseds.gql | 9 + src/gql/queries/vaultGasWithdrawn.gql | 9 + src/gql/queries/vaultGasWithdrawns.gql | 9 + src/gql/queries/vaultPosition.gql | 55 + src/gql/queries/vaultPositions.gql | 55 + src/gql/queries/vaultSnapshot.gql | 62 + src/gql/queries/vaultSnapshots.gql | 62 + src/gql/queries/vaultStateChanged.gql | 53 + src/gql/queries/vaultStateChangeds.gql | 53 + src/gql/queries/vaultTransfer.gql | 10 + src/gql/queries/vaultTransfers.gql | 10 + src/gql/queries/vaultWithdraw.gql | 60 + src/gql/queries/vaultWithdraws.gql | 60 + src/gql/queries/vaults.gql | 114 + src/gql/queries/vote.gql | 24 + src/gql/queries/votes.gql | 24 + src/gql/queries/whiteListManager.gql | 14 + src/gql/queries/whiteListManagers.gql | 14 + src/gql/queries/whiteListVaultPermission.gql | 60 + src/gql/queries/whiteListVaultPermissions.gql | 60 + src/gql/subscriptions/index.ts | 4 + src/gql/subscriptions/onEvent.gql | 208 + src/hooks.ts | 86 + src/indexer.ts | 1528 ++++ src/job-runner.ts | 48 + src/resolvers.ts | 2074 +++++ src/schema.gql | 5784 ++++++++++++ src/server.ts | 43 + src/types.ts | 3 + .../BundleRegistry/BundleRegistry.wasm | Bin 0 -> 186034 bytes .../BundleRegistry/abis/BundleRegistry.json | 430 + .../DynamicJob/abis/DynamicJobs.json | 361 + subgraph-build/GasVault/GasVault.wasm | Bin 0 -> 196272 bytes subgraph-build/GasVault/abis/GasVault.json | 451 + .../KeeperRegistry/KeeperRegistry.wasm | Bin 0 -> 191887 bytes .../KeeperRegistry/abis/KeeperRegistry.json | 516 ++ subgraph-build/Orchestrator/Orchestrator.wasm | Bin 0 -> 191847 bytes .../Orchestrator/abis/Orchestrator.json | 489 + .../StrategyRegistry/StrategyRegistry.wasm | Bin 0 -> 189042 bytes .../abis/StrategyRegistry.json | 1140 +++ .../abis/MultiPositionLiquidityManager.json | 1169 +++ subgraph-build/Vault/abis/SteerPeriphery.json | 818 ++ subgraph-build/Vault/abis/VaultUpgraded.json | 1258 +++ .../VaultRegistry/VaultRegistry.wasm | Bin 0 -> 331298 bytes .../VaultRegistry/abis/SteerPeriphery.json | 818 ++ .../VaultRegistry/abis/StrategyRegistry.json | 1140 +++ subgraph-build/VaultRegistry/abis/Vault.json | 1196 +++ .../VaultRegistry/abis/VaultRegistry.json | 1072 +++ .../WhitelistRegistry/WhitelistRegistry.wasm | Bin 0 -> 190630 bytes .../abis/WhitelistRegistry.json | 163 + subgraph-build/subgraph.graphql | 477 + subgraph-build/subgraph.yaml | 236 + .../templates/DynamicJob/DynamicJob.wasm | Bin 0 -> 198739 bytes tsconfig.json | 74 + yarn.lock | 7842 +++++++++++++++++ 204 files changed, 42502 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100755 .husky/pre-commit create mode 100644 .npmrc create mode 100644 LICENSE create mode 100644 codegen-config.yml create mode 100644 environments/local.toml create mode 100644 package.json create mode 100644 src/artifacts/BundleRegistry.json create mode 100644 src/artifacts/DynamicJob.json create mode 100644 src/artifacts/GasVault.json create mode 100644 src/artifacts/KeeperRegistry.json create mode 100644 src/artifacts/Orchestrator.json create mode 100644 src/artifacts/StrategyRegistry.json create mode 100644 src/artifacts/Vault.json create mode 100644 src/artifacts/VaultRegistry.json create mode 100644 src/artifacts/WhitelistRegistry.json create mode 100644 src/cli/checkpoint-cmds/create.ts create mode 100644 src/cli/checkpoint-cmds/verify.ts create mode 100644 src/cli/checkpoint.ts create mode 100644 src/cli/export-state.ts create mode 100644 src/cli/import-state.ts create mode 100644 src/cli/index-block.ts create mode 100644 src/cli/inspect-cid.ts create mode 100644 src/cli/reset-cmds/job-queue.ts create mode 100644 src/cli/reset-cmds/state.ts create mode 100644 src/cli/reset-cmds/watcher.ts create mode 100644 src/cli/reset.ts create mode 100644 src/cli/watch-contract.ts create mode 100644 src/client.ts create mode 100644 src/database.ts create mode 100644 src/entity/ActionFailure.ts create mode 100644 src/entity/BlockProgress.ts create mode 100644 src/entity/Bundle.ts create mode 100644 src/entity/Contract.ts create mode 100644 src/entity/Creator.ts create mode 100644 src/entity/CreatorWithdrawal.ts create mode 100644 src/entity/Depositor.ts create mode 100644 src/entity/Event.ts create mode 100644 src/entity/FrothyEntity.ts create mode 100644 src/entity/Job.ts create mode 100644 src/entity/JobExecution.ts create mode 100644 src/entity/JobGasDeposited.ts create mode 100644 src/entity/JobGasWithdrawn.ts create mode 100644 src/entity/Keeper.ts create mode 100644 src/entity/LeaderBoard.ts create mode 100644 src/entity/LiquiditySteer.ts create mode 100644 src/entity/OrchestratorAction.ts create mode 100644 src/entity/OrchestratorReward.ts create mode 100644 src/entity/OrchestratorRewardSnapshot.ts create mode 100644 src/entity/OrchestratorRewardTracker.ts create mode 100644 src/entity/PermissionUpdate.ts create mode 100644 src/entity/PrevAnnualVaultSnapshot.ts create mode 100644 src/entity/PrevDailyVaultSnapshot.ts create mode 100644 src/entity/PrevMonthlyVaultSnapshot.ts create mode 100644 src/entity/PrevVaultSnapshot.ts create mode 100644 src/entity/PrevWeeklyVaultSnapshot.ts create mode 100644 src/entity/QueueTimeline.ts create mode 100644 src/entity/Runner.ts create mode 100644 src/entity/State.ts create mode 100644 src/entity/StateSyncStatus.ts create mode 100644 src/entity/Strategy.ts create mode 100644 src/entity/Subscriber.ts create mode 100644 src/entity/SyncStatus.ts create mode 100644 src/entity/Vault.ts create mode 100644 src/entity/VaultBeacon.ts create mode 100644 src/entity/VaultDeposit.ts create mode 100644 src/entity/VaultGasDeposited.ts create mode 100644 src/entity/VaultGasUsed.ts create mode 100644 src/entity/VaultGasWithdrawn.ts create mode 100644 src/entity/VaultPosition.ts create mode 100644 src/entity/VaultSnapshot.ts create mode 100644 src/entity/VaultStateChanged.ts create mode 100644 src/entity/VaultTransfer.ts create mode 100644 src/entity/VaultWithdraw.ts create mode 100644 src/entity/Vote.ts create mode 100644 src/entity/WhiteListManager.ts create mode 100644 src/entity/WhiteListVaultPermission.ts create mode 100644 src/fill.ts create mode 100644 src/gql/index.ts create mode 100644 src/gql/mutations/index.ts create mode 100644 src/gql/mutations/watchContract.gql create mode 100644 src/gql/queries/_meta.gql create mode 100644 src/gql/queries/actionFailure.gql create mode 100644 src/gql/queries/actionFailures.gql create mode 100644 src/gql/queries/bundle.gql create mode 100644 src/gql/queries/bundles.gql create mode 100644 src/gql/queries/creator.gql create mode 100644 src/gql/queries/creatorWithdrawal.gql create mode 100644 src/gql/queries/creatorWithdrawals.gql create mode 100644 src/gql/queries/creators.gql create mode 100644 src/gql/queries/depositor.gql create mode 100644 src/gql/queries/depositors.gql create mode 100644 src/gql/queries/events.gql create mode 100644 src/gql/queries/eventsInRange.gql create mode 100644 src/gql/queries/getState.gql create mode 100644 src/gql/queries/getStateByCID.gql create mode 100644 src/gql/queries/getSyncStatus.gql create mode 100644 src/gql/queries/index.ts create mode 100644 src/gql/queries/job.gql create mode 100644 src/gql/queries/jobExecution.gql create mode 100644 src/gql/queries/jobExecutions.gql create mode 100644 src/gql/queries/jobGasDeposited.gql create mode 100644 src/gql/queries/jobGasDepositeds.gql create mode 100644 src/gql/queries/jobGasWithdrawn.gql create mode 100644 src/gql/queries/jobGasWithdrawns.gql create mode 100644 src/gql/queries/jobs.gql create mode 100644 src/gql/queries/keeper.gql create mode 100644 src/gql/queries/keepers.gql create mode 100644 src/gql/queries/leaderBoard.gql create mode 100644 src/gql/queries/leaderBoards.gql create mode 100644 src/gql/queries/liquiditySteer.gql create mode 100644 src/gql/queries/liquiditySteers.gql create mode 100644 src/gql/queries/orchestratorAction.gql create mode 100644 src/gql/queries/orchestratorActions.gql create mode 100644 src/gql/queries/orchestratorReward.gql create mode 100644 src/gql/queries/orchestratorRewardSnapshot.gql create mode 100644 src/gql/queries/orchestratorRewardSnapshots.gql create mode 100644 src/gql/queries/orchestratorRewardTracker.gql create mode 100644 src/gql/queries/orchestratorRewardTrackers.gql create mode 100644 src/gql/queries/orchestratorRewards.gql create mode 100644 src/gql/queries/permissionUpdate.gql create mode 100644 src/gql/queries/permissionUpdates.gql create mode 100644 src/gql/queries/prevAnnualVaultSnapshot.gql create mode 100644 src/gql/queries/prevAnnualVaultSnapshots.gql create mode 100644 src/gql/queries/prevDailyVaultSnapshot.gql create mode 100644 src/gql/queries/prevDailyVaultSnapshots.gql create mode 100644 src/gql/queries/prevMonthlyVaultSnapshot.gql create mode 100644 src/gql/queries/prevMonthlyVaultSnapshots.gql create mode 100644 src/gql/queries/prevVaultSnapshot.gql create mode 100644 src/gql/queries/prevVaultSnapshots.gql create mode 100644 src/gql/queries/prevWeeklyVaultSnapshot.gql create mode 100644 src/gql/queries/prevWeeklyVaultSnapshots.gql create mode 100644 src/gql/queries/queueTimeline.gql create mode 100644 src/gql/queries/queueTimelines.gql create mode 100644 src/gql/queries/runner.gql create mode 100644 src/gql/queries/runners.gql create mode 100644 src/gql/queries/strategies.gql create mode 100644 src/gql/queries/strategy.gql create mode 100644 src/gql/queries/vault.gql create mode 100644 src/gql/queries/vaultBeacon.gql create mode 100644 src/gql/queries/vaultBeacons.gql create mode 100644 src/gql/queries/vaultDeposit.gql create mode 100644 src/gql/queries/vaultDeposits.gql create mode 100644 src/gql/queries/vaultGasDeposited.gql create mode 100644 src/gql/queries/vaultGasDepositeds.gql create mode 100644 src/gql/queries/vaultGasUsed.gql create mode 100644 src/gql/queries/vaultGasUseds.gql create mode 100644 src/gql/queries/vaultGasWithdrawn.gql create mode 100644 src/gql/queries/vaultGasWithdrawns.gql create mode 100644 src/gql/queries/vaultPosition.gql create mode 100644 src/gql/queries/vaultPositions.gql create mode 100644 src/gql/queries/vaultSnapshot.gql create mode 100644 src/gql/queries/vaultSnapshots.gql create mode 100644 src/gql/queries/vaultStateChanged.gql create mode 100644 src/gql/queries/vaultStateChangeds.gql create mode 100644 src/gql/queries/vaultTransfer.gql create mode 100644 src/gql/queries/vaultTransfers.gql create mode 100644 src/gql/queries/vaultWithdraw.gql create mode 100644 src/gql/queries/vaultWithdraws.gql create mode 100644 src/gql/queries/vaults.gql create mode 100644 src/gql/queries/vote.gql create mode 100644 src/gql/queries/votes.gql create mode 100644 src/gql/queries/whiteListManager.gql create mode 100644 src/gql/queries/whiteListManagers.gql create mode 100644 src/gql/queries/whiteListVaultPermission.gql create mode 100644 src/gql/queries/whiteListVaultPermissions.gql create mode 100644 src/gql/subscriptions/index.ts create mode 100644 src/gql/subscriptions/onEvent.gql create mode 100644 src/hooks.ts create mode 100644 src/indexer.ts create mode 100644 src/job-runner.ts create mode 100644 src/resolvers.ts create mode 100644 src/schema.gql create mode 100644 src/server.ts create mode 100644 src/types.ts create mode 100644 subgraph-build/BundleRegistry/BundleRegistry.wasm create mode 100644 subgraph-build/BundleRegistry/abis/BundleRegistry.json create mode 100644 subgraph-build/DynamicJob/abis/DynamicJobs.json create mode 100644 subgraph-build/GasVault/GasVault.wasm create mode 100644 subgraph-build/GasVault/abis/GasVault.json create mode 100644 subgraph-build/KeeperRegistry/KeeperRegistry.wasm create mode 100644 subgraph-build/KeeperRegistry/abis/KeeperRegistry.json create mode 100644 subgraph-build/Orchestrator/Orchestrator.wasm create mode 100644 subgraph-build/Orchestrator/abis/Orchestrator.json create mode 100644 subgraph-build/StrategyRegistry/StrategyRegistry.wasm create mode 100644 subgraph-build/StrategyRegistry/abis/StrategyRegistry.json create mode 100644 subgraph-build/Vault/abis/MultiPositionLiquidityManager.json create mode 100644 subgraph-build/Vault/abis/SteerPeriphery.json create mode 100644 subgraph-build/Vault/abis/VaultUpgraded.json create mode 100644 subgraph-build/VaultRegistry/VaultRegistry.wasm create mode 100644 subgraph-build/VaultRegistry/abis/SteerPeriphery.json create mode 100644 subgraph-build/VaultRegistry/abis/StrategyRegistry.json create mode 100644 subgraph-build/VaultRegistry/abis/Vault.json create mode 100644 subgraph-build/VaultRegistry/abis/VaultRegistry.json create mode 100644 subgraph-build/WhitelistRegistry/WhitelistRegistry.wasm create mode 100644 subgraph-build/WhitelistRegistry/abis/WhitelistRegistry.json create mode 100644 subgraph-build/subgraph.graphql create mode 100644 subgraph-build/subgraph.yaml create mode 100644 subgraph-build/templates/DynamicJob/DynamicJob.wasm create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..55cb522 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +# Don't lint build output. +dist diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..a2b842c --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,28 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "semistandard", + "plugin:@typescript-eslint/recommended" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 12, + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "indent": ["error", 2, { "SwitchCase": 1 }], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-module-boundary-types": [ + "warn", + { + "allowArgumentsExplicitlyTypedAsAny": true + } + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549d70b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +dist/ +out/ + +.vscode +.idea + +gql-logs/ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..9dcd433 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn lint diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..6b64c5b --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@cerc-io:registry=https://git.vdb.to/api/packages/cerc-io/npm/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..331f7cf --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for + software and other kinds of works, specifically designed to ensure + cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed + to take away your freedom to share and change the works. By contrast, + our General Public Licenses are intended to guarantee your freedom to + share and change all versions of a program--to make sure it remains free + software for all its users. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + them if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights + with two steps: (1) assert copyright on the software, and (2) offer + you this License which gives you legal permission to copy, distribute + and/or modify the software. + + A secondary benefit of defending all users' freedom is that + improvements made in alternate versions of the program, if they + receive widespread use, become available for other developers to + incorporate. Many developers of free software are heartened and + encouraged by the resulting cooperation. However, in the case of + software used on network servers, this result may fail to come about. + The GNU General Public License permits making a modified version and + letting the public access it on a server without ever releasing its + source code to the public. + + The GNU Affero General Public License is designed specifically to + ensure that, in such cases, the modified source code becomes available + to the community. It requires the operator of a network server to + provide the source code of the modified version running there to the + users of that server. Therefore, public use of a modified version, on + a publicly accessible server, gives the public access to the source + code of the modified version. + + An older license, called the Affero General Public License and + published by Affero, was designed to accomplish similar goals. This is + a different license, not a version of the Affero GPL, but Affero has + released a new version of the Affero GPL which permits relicensing under + this license. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of + works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work + in a fashion requiring copyright permission, other than the making of an + exact copy. The resulting work is called a "modified version" of the + earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based + on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it on a + computer or modifying a private copy. Propagation includes copying, + distribution (with or without modification), making available to the + public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user through + a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to the + extent that warranties are provided), that licensees may convey the + work under this License, and how to view a copy of this License. If + the interface presents a list of user commands or options, such as a + menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any non-source + form of a work. + + A "Standard Interface" means an interface that either is an official + standard defined by a recognized standards body, or, in the case of + interfaces specified for a particular programming language, one that + is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other + than the work as a whole, that (a) is included in the normal form of + packaging a Major Component, but which is not part of that Major + Component, and (b) serves only to enable use of the work with that + Major Component, or to implement a Standard Interface for which an + implementation is available to the public in source code form. A + "Major Component", in this context, means a major essential component + (kernel, window system, and so on) of the specific operating system + (if any) on which the executable work runs, or a compiler used to + produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including scripts to + control those activities. However, it does not include the work's + System Libraries, or general-purpose tools or generally available free + programs which are used unmodified in performing those activities but + which are not part of the work. For example, Corresponding Source + includes interface definition files associated with source files for + the work, and the source code for shared libraries and dynamically + linked subprograms that the work is specifically designed to require, + such as by intimate data communication or control flow between those + subprograms and other parts of the work. + + The Corresponding Source need not include anything that users + can regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running a + covered work is covered by this License only if the output, given its + content, constitutes a covered work. This License acknowledges your + rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise remains + in force. You may convey covered works to others for the sole purpose + of having them make modifications exclusively for you, or provide you + with facilities for running those works, provided that you comply with + the terms of this License in conveying all material for which you do + not control copyright. Those thus making or running the covered works + for you must do so exclusively on your behalf, under your direction + and control, on terms that prohibit them from making any copies of + your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section 10 + makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under article + 11 of the WIPO copyright treaty adopted on 20 December 1996, or + similar laws prohibiting or restricting circumvention of such + measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such circumvention + is effected by exercising rights under this License with respect to + the covered work, and you disclaim any intention to limit operation or + modification of the work as a means of enforcing, against the work's + users, your or third parties' legal rights to forbid circumvention of + technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the code; + keep intact all notices of the absence of any warranty; and give all + recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered work, + and which are not combined with it such as to form a larger program, + in or on a volume of a storage or distribution medium, is called an + "aggregate" if the compilation and its resulting copyright are not + used to limit the access or legal rights of the compilation's users + beyond what the individual works permit. Inclusion of a covered work + in an aggregate does not cause this License to apply to the other + parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this License, + in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded + from the Corresponding Source as a System Library, need not be + included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any + tangible personal property which is normally used for personal, family, + or household purposes, or (2) anything designed or sold for incorporation + into a dwelling. In determining whether a product is a consumer product, + doubtful cases shall be resolved in favor of coverage. For a particular + product received by a particular user, "normally used" refers to a + typical or common use of that class of product, regardless of the status + of the particular user or of the way in which the particular user + actually uses, or expects or is expected to use, the product. A product + is a consumer product regardless of whether the product has substantial + commercial, industrial or non-consumer uses, unless such uses represent + the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to install + and execute modified versions of a covered work in that User Product from + a modified version of its Corresponding Source. The information must + suffice to ensure that the continued functioning of the modified object + code is in no case prevented or interfered with solely because + modification has been made. + + If you convey an object code work under this section in, or with, or + specifically for use in, a User Product, and the conveying occurs as + part of a transaction in which the right of possession and use of the + User Product is transferred to the recipient in perpetuity or for a + fixed term (regardless of how the transaction is characterized), the + Corresponding Source conveyed under this section must be accompanied + by the Installation Information. But this requirement does not apply + if neither you nor any third party retains the ability to install + modified object code on the User Product (for example, the work has + been installed in ROM). + + The requirement to provide Installation Information does not include a + requirement to continue to provide support service, warranty, or updates + for a work that has been modified or installed by the recipient, or for + the User Product in which it has been modified or installed. Access to a + network may be denied when the modification itself materially and + adversely affects the operation of the network or violates the rules and + protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, + in accord with this section must be in a format that is publicly + documented (and with an implementation available to the public in + source code form), and must require no special password or key for + unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this + License by making exceptions from one or more of its conditions. + Additional permissions that are applicable to the entire Program shall + be treated as though they were included in this License, to the extent + that they are valid under applicable law. If additional permissions + apply only to part of the Program, that part may be used separately + under those permissions, but the entire Program remains governed by + this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part of + it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you + add to a covered work, you may (if authorized by the copyright holders of + that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as you + received it, or any part of it, contains a notice stating that it is + governed by this License along with a term that is a further + restriction, you may remove that term. If a license document contains + a further restriction but permits relicensing or conveying under this + License, you may add to a covered work material governed by the terms + of that license document, provided that the further restriction does + not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the + form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights under + this License (including any patent licenses granted under the third + paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly and + finally terminates your license, and (b) permanently, if the copyright + holder fails to notify you of the violation by some reasonable means + prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from that + copyright holder, and you cure the violation prior to 30 days after + your receipt of the notice. + + Termination of your rights under this section does not terminate the + licenses of parties who have received copies or rights from you under + this License. If your rights have been terminated and not permanently + reinstated, you do not qualify to receive new licenses for the same + material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer transmission + to receive a copy likewise does not require acceptance. However, + nothing other than this License grants you permission to propagate or + modify any covered work. These actions infringe copyright if you do + not accept this License. Therefore, by modifying or propagating a + covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not responsible + for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a covered + work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or could + give under the previous paragraph, plus a right to possession of the + Corresponding Source of the work from the predecessor in interest, if + the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you may + not impose a license fee, royalty, or other charge for exercise of + rights granted under this License, and you may not initiate litigation + (including a cross-claim or counterclaim in a lawsuit) alleging that + any patent claim is infringed by making, using, selling, offering for + sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. The + work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, permitted + by this License, of making, using, or selling its contributor version, + but do not include claims that would be infringed only as a + consequence of further modification of the contributor version. For + purposes of this definition, "control" includes the right to grant + patent sublicenses in a manner consistent with the requirements of + this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free + patent license under the contributor's essential patent claims, to + make, use, sell, offer for sale, import and otherwise run, modify and + propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express + agreement or commitment, however denominated, not to enforce a patent + (such as an express permission to practice a patent or covenant not to + sue for patent infringement). To "grant" such a patent license to a + party means to make such an agreement or commitment not to enforce a + patent against the party. + + If you convey a covered work, knowingly relying on a patent license, + and the Corresponding Source of the work is not available for anyone + to copy, free of charge and under the terms of this License, through a + publicly available network server or other readily accessible means, + then you must either (1) cause the Corresponding Source to be so + available, or (2) arrange to deprive yourself of the benefit of the + patent license for this particular work, or (3) arrange, in a manner + consistent with the requirements of this License, to extend the patent + license to downstream recipients. "Knowingly relying" means you have + actual knowledge that, but for the patent license, your conveying the + covered work in a country, or your recipient's use of the covered work + in a country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, modify + or convey a specific copy of the covered work, then the patent license + you grant is automatically extended to all recipients of the covered + work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that are + specifically granted under this License. You may not convey a covered + work if you are a party to an arrangement with a third party that is + in the business of distributing software, under which you make payment + to the third party based on the extent of your activity of conveying + the work, and under which the third party grants, to any of the + parties who would receive the covered work from you, a discriminatory + patent license (a) in connection with copies of the covered work + conveyed by you (or copies made from those copies), or (b) primarily + for and in connection with specific products or compilations that + contain the covered work, unless you entered into that arrangement, + or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot convey a + covered work so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you may + not convey it at all. For example, if you agree to terms that obligate you + to collect a royalty for further conveying from those to whom you convey + the Program, the only way you could satisfy both those terms and this + License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the + Program, your modified version must prominently offer all users + interacting with it remotely through a computer network (if your version + supports such interaction) an opportunity to receive the Corresponding + Source of your version by providing access to the Corresponding Source + from a network server at no charge, through some standard or customary + means of facilitating copying of software. This Corresponding Source + shall include the Corresponding Source for any work covered by version 3 + of the GNU General Public License that is incorporated pursuant to the + following paragraph. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU General Public License into a single + combined work, and to convey the resulting work. The terms of this + License will continue to apply to the part which is the covered work, + but the work with which it is combined will remain governed by version + 3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of + the GNU Affero General Public License from time to time. Such new versions + will be similar in spirit to the present version, but may differ in detail to + address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU Affero General + Public License "or any later version" applies to it, you have the + option of following the terms and conditions either of that numbered + version or of any later version published by the Free Software + Foundation. If the Program does not specify a version number of the + GNU Affero General Public License, you may choose any version ever published + by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU Affero General Public License can be used, that proxy's + public statement of acceptance of a version permanently authorizes you + to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY + OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM + IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF + ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS + THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY + GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE + USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), + EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely approximates + an absolute waiver of all civil liability in connection with the + Program, unless a warranty or assumption of liability accompanies a + copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + state the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + + Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer + network, you should also make sure that it provides a way for users to + get its source. For example, if your program is a web application, its + interface could display a "Source" link that leads users to an archive + of the code. There are many ways you could offer source, and different + solutions will be better for different programs; see section 13 for the + specific requirements. + + You should also get your employer (if you work as a programmer) or school, + if any, to sign a "copyright disclaimer" for the program, if necessary. + For more information on this, and how to apply and follow the GNU AGPL, see + . diff --git a/README.md b/README.md index 2be1ea5..1d815f1 100644 --- a/README.md +++ b/README.md @@ -1 +1,223 @@ # steer-protocol-watcher-ts + +## Source + +* Subgraph: [filecoin-subgraph](https://github.com/SteerProtocol/filecoin-subgraph/tree/main) + * NOTE: Generating watcher using [codegen config](./codegen-config.yml) works without any changes in subgraph repo + +## Setup + +* Run the following command to install required packages: + + ```bash + yarn + ``` + +* Run build: + + ```bash + yarn build + ``` + +* Create a postgres12 database for the watcher: + + ```bash + sudo su - postgres + createdb steer-protocol-watcher-ts + ``` + +* If the watcher is an `active` watcher: + + Create database for the job queue and enable the `pgcrypto` extension on them (https://github.com/timgit/pg-boss/blob/master/docs/usage.md#intro): + + ``` + createdb steer-protocol-watcher-ts-job-queue + ``` + + ``` + postgres@tesla:~$ psql -U postgres -h localhost steer-protocol-watcher-ts-job-queue + Password for user postgres: + psql (12.7 (Ubuntu 12.7-1.pgdg18.04+1)) + SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) + Type "help" for help. + + steer-protocol-watcher-ts-job-queue=# CREATE EXTENSION pgcrypto; + CREATE EXTENSION + steer-protocol-watcher-ts-job-queue=# exit + ``` + +* In the [config file](./environments/local.toml): + + * Update the database connection settings. + + * Update the `upstream` config and provide the `ipld-eth-server` GQL API endpoint. + + * Update the `server` config with state checkpoint settings. + +## Customize + +* Indexing on an event: + + * Edit the custom hook function `handleEvent` (triggered on an event) in [hooks.ts](./src/hooks.ts) to perform corresponding indexing using the `Indexer` object. + + * While using the indexer storage methods for indexing, pass `diff` as true if default state is desired to be generated using the state variables being indexed. + +* Generating state: + + * Edit the custom hook function `createInitialState` (triggered if the watcher passes the start block, checkpoint: `true`) in [hooks.ts](./src/hooks.ts) to save an initial `State` using the `Indexer` object. + + * Edit the custom hook function `createStateDiff` (triggered on a block) in [hooks.ts](./src/hooks.ts) to save the state in a `diff` `State` using the `Indexer` object. The default state (if exists) is updated. + + * Edit the custom hook function `createStateCheckpoint` (triggered just before default and CLI checkpoint) in [hooks.ts](./src/hooks.ts) to save the state in a `checkpoint` `State` using the `Indexer` object. + +### GQL Caching + +To enable GQL requests caching: + +* Update the `server.gql.cache` config with required settings. + +* In the GQL [schema file](./src/schema.gql), use the `cacheControl` directive to apply cache hints at schema level. + + * Eg. Set `inheritMaxAge` to true for non-scalar fields of a type. + +* In the GQL [resolvers file](./src/resolvers.ts), uncomment the `setGQLCacheHints()` calls in resolvers for required queries. + +## Run + +* If the watcher is a `lazy` watcher: + + * Run the server: + + ```bash + yarn server + ``` + + GQL console: http://localhost:3008/graphql + +* If the watcher is an `active` watcher: + + * Run the job-runner: + + ```bash + yarn job-runner + ``` + + * Run the server: + + ```bash + yarn server + ``` + + GQL console: http://localhost:3008/graphql + + * To watch a contract: + + ```bash + yarn watch:contract --address --kind --checkpoint --starting-block [block-number] + ``` + + * `address`: Address or identifier of the contract to be watched. + * `kind`: Kind of the contract. + * `checkpoint`: Turn checkpointing on (`true` | `false`). + * `starting-block`: Starting block for the contract (default: `1`). + + Examples: + + Watch a contract with its address and checkpointing on: + + ```bash + yarn watch:contract --address 0x1F78641644feB8b64642e833cE4AFE93DD6e7833 --kind ERC20 --checkpoint true + ``` + + Watch a contract with its identifier and checkpointing on: + + ```bash + yarn watch:contract --address MyProtocol --kind protocol --checkpoint true + ``` + + * To fill a block range: + + ```bash + yarn fill --start-block --end-block + ``` + + * `start-block`: Block number to start filling from. + * `end-block`: Block number till which to fill. + + * To create a checkpoint for a contract: + + ```bash + yarn checkpoint create --address --block-hash [block-hash] + ``` + + * `address`: Address or identifier of the contract for which to create a checkpoint. + * `block-hash`: Hash of a block (in the pruned region) at which to create the checkpoint (default: latest canonical block hash). + + * To verify a checkpoint: + + ```bash + yarn checkpoint verify --cid + ``` + + `cid`: CID of the checkpoint for which to verify. + + * To reset the watcher to a previous block number: + + * Reset watcher: + + ```bash + yarn reset watcher --block-number + ``` + + * Reset job-queue: + + ```bash + yarn reset job-queue + ``` + + * Reset state: + + ```bash + yarn reset state --block-number + ``` + + * `block-number`: Block number to which to reset the watcher. + + * To export and import the watcher state: + + * In source watcher, export watcher state: + + ```bash + yarn export-state --export-file [export-file-path] --block-number [snapshot-block-height] + ``` + + * `export-file`: Path of file to which to export the watcher data. + * `block-number`: Block height at which to take snapshot for export. + + * In target watcher, run job-runner: + + ```bash + yarn job-runner + ``` + + * Import watcher state: + + ```bash + yarn import-state --import-file + ``` + + * `import-file`: Path of file from which to import the watcher data. + + * Run server: + + ```bash + yarn server + ``` + + * To inspect a CID: + + ```bash + yarn inspect-cid --cid + ``` + + * `cid`: CID to be inspected. diff --git a/codegen-config.yml b/codegen-config.yml new file mode 100644 index 0000000..0e01966 --- /dev/null +++ b/codegen-config.yml @@ -0,0 +1,36 @@ +# Example config.yaml +# Contracts to watch (required). +# Can pass empty array ([]) when using subgraphPath. +contracts: [] + +# Output folder path (logs output using `stdout` if not provided). +outputFolder: /home/user/cerc-io/steer-protocol-watcher-ts + +# Code generation mode [eth_call | storage | all | none] (default: none). +mode: none + +# Kind of watcher [lazy | active] (default: active). +kind: active + +# Watcher server port (default: 3008). +port: 3008 + +# Flatten the input contract file(s) [true | false] (default: true). +flatten: true + +# Config for subgraph +subgraph: + # Path to subgraph repo directory containing package.json + directory: /home/user/cerc-io/filecoin-subgraph + + # Package manager that is used in subgraph repo for dependencies + packageManager: npm + + # Path to subgraph manifest/config file + configFile: /home/user/cerc-io/filecoin-subgraph/subgraph.yaml + + # Networks config file path used when building subgraph (optional) + networkFilePath: /home/user/cerc-io/filecoin-subgraph/networks.json + + # Network configuration to use from the networks config file (optional) + network: filecoin diff --git a/environments/local.toml b/environments/local.toml new file mode 100644 index 0000000..1beb20d --- /dev/null +++ b/environments/local.toml @@ -0,0 +1,123 @@ +[server] + host = "127.0.0.1" + port = 3008 + kind = "active" + + # Checkpointing state. + checkpointing = true + + # Checkpoint interval in number of blocks. + checkpointInterval = 2000 + + # Enable state creation + enableState = false + + subgraphPath = "./subgraph-build" + + # Interval to restart wasm instance periodically + wasmRestartBlocksInterval = 20 + + # Interval in number of blocks at which to clear entities cache. + clearEntitiesCacheInterval = 1000 + + # Flag to specify whether RPC endpoint supports block hash as block tag parameter + rpcSupportsBlockHashParam = false + + # GQL server config + [server.gql] + path = "/graphql" + + # Max block range for which to return events in eventsInRange GQL query. + # Use -1 for skipping check on block range. + maxEventsBlockRange = 1000 + + # Log directory for GQL requests + logDir = "./gql-logs" + + # GQL cache settings + [server.gql.cache] + enabled = true + + # Max in-memory cache size (in bytes) (default 8 MB) + # maxCacheSize + + # GQL cache-control max-age settings (in seconds) + maxAge = 15 + timeTravelMaxAge = 86400 # 1 day + + # ETH RPC server config + [server.ethRPC] + enabled = true + path = "/rpc" + + # Max number of logs that can be returned in a single getLogs request (default: 10000) + getLogsResultLimit = 10000 + +[metrics] + host = "127.0.0.1" + port = 9000 + [metrics.gql] + port = 9001 + +[database] + type = "postgres" + host = "localhost" + port = 5432 + database = "steer-protocol-watcher-ts" + username = "postgres" + password = "postgres" + synchronize = true + logging = false + +[upstream] + [upstream.ethServer] + # gqlApiEndpoint = "http://127.0.0.1:8082/graphql" + rpcProviderEndpoints = [ + "http://127.0.0.1:8081" + ] + + # Boolean flag to specify if rpc-eth-client should be used for RPC endpoint instead of ipld-eth-client (ipld-eth-server GQL client) + rpcClient = true + + # Boolean flag to specify if rpcProviderEndpoint is an FEVM RPC endpoint + isFEVM = true + + # Boolean flag to filter event logs by contracts + filterLogsByAddresses = true + # Boolean flag to filter event logs by topics + filterLogsByTopics = true + + # Switch clients if eth_getLogs call takes more than threshold (in secs) + # Set to 0 for disabling switching + getLogsClientSwitchThresholdInSecs = 0 + + [upstream.cache] + name = "requests" + enabled = false + deleteOnStart = false + +[jobQueue] + dbConnectionString = "postgres://postgres:postgres@localhost/steer-protocol-watcher-ts-job-queue" + maxCompletionLagInSecs = 300 + jobDelayInMilliSecs = 100 + eventsInBatch = 50 + subgraphEventsOrder = true + blockDelayInMilliSecs = 30000 + + # Number of blocks by which block processing lags behind head + blockProcessingOffset = 0 + + # Boolean to switch between modes of processing events when starting the server. + # Setting to true will fetch filtered events and required blocks in a range of blocks and then process them. + # Setting to false will fetch blocks consecutively with its events and then process them (Behaviour is followed in realtime processing near head). + useBlockRanges = true + + # Block range in which logs are fetched during historical blocks processing + historicalLogsBlockRange = 2000 + + # Max block range of historical processing after which it waits for completion of events processing + # If set to -1 historical processing does not wait for events processing and completes till latest canonical block + historicalMaxFetchAhead = 10000 + + # Max number of retries to fetch new block after which watcher will failover to other RPC endpoints + maxNewBlockRetries = 3 diff --git a/package.json b/package.json new file mode 100644 index 0000000..11ec3d3 --- /dev/null +++ b/package.json @@ -0,0 +1,78 @@ +{ + "name": "@cerc-io/steer-protocol-watcher-ts", + "version": "0.1.0", + "description": "steer-protocol-watcher-ts", + "private": true, + "main": "dist/index.js", + "scripts": { + "lint": "eslint --max-warnings=0 .", + "build": "yarn clean && tsc && yarn copy-assets", + "clean": "rm -rf ./dist", + "prepare": "husky install", + "copy-assets": "copyfiles -u 1 src/**/*.gql dist/", + "server": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true node --enable-source-maps dist/server.js", + "server:dev": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true ts-node src/server.ts", + "job-runner": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true node --enable-source-maps dist/job-runner.js", + "job-runner:dev": "DEBUG=vulcanize:* YARN_CHILD_PROCESS=true ts-node src/job-runner.ts", + "watch:contract": "DEBUG=vulcanize:* ts-node src/cli/watch-contract.ts", + "fill": "DEBUG=vulcanize:* ts-node src/fill.ts", + "fill:state": "DEBUG=vulcanize:* ts-node src/fill.ts --state", + "reset": "DEBUG=vulcanize:* ts-node src/cli/reset.ts", + "checkpoint": "DEBUG=vulcanize:* node --enable-source-maps dist/cli/checkpoint.js", + "checkpoint:dev": "DEBUG=vulcanize:* ts-node src/cli/checkpoint.ts", + "export-state": "DEBUG=vulcanize:* node --enable-source-maps dist/cli/export-state.js", + "export-state:dev": "DEBUG=vulcanize:* ts-node src/cli/export-state.ts", + "import-state": "DEBUG=vulcanize:* node --enable-source-maps dist/cli/import-state.js", + "import-state:dev": "DEBUG=vulcanize:* ts-node src/cli/import-state.ts", + "inspect-cid": "DEBUG=vulcanize:* ts-node src/cli/inspect-cid.ts", + "index-block": "DEBUG=vulcanize:* ts-node src/cli/index-block.ts" + }, + "repository": { + "type": "git", + "url": "https://github.com/cerc-io/watcher-ts.git" + }, + "author": "", + "license": "AGPL-3.0", + "bugs": { + "url": "https://github.com/cerc-io/watcher-ts/issues" + }, + "homepage": "https://github.com/cerc-io/watcher-ts#readme", + "dependencies": { + "@apollo/client": "^3.3.19", + "@cerc-io/cli": "^0.2.107", + "@cerc-io/ipld-eth-client": "^0.2.107", + "@cerc-io/solidity-mapper": "^0.2.107", + "@cerc-io/util": "^0.2.107", + "@cerc-io/graph-node": "^0.2.107", + "@ethersproject/providers": "^5.4.4", + "debug": "^4.3.1", + "decimal.js": "^10.3.1", + "ethers": "^5.4.4", + "graphql": "^15.5.0", + "json-bigint": "^1.0.0", + "reflect-metadata": "^0.1.13", + "typeorm": "0.2.37", + "yargs": "^17.0.1" + }, + "devDependencies": { + "@ethersproject/abi": "^5.3.0", + "@types/debug": "^4.1.5", + "@types/json-bigint": "^1.0.0", + "@types/yargs": "^17.0.0", + "@typescript-eslint/eslint-plugin": "^5.47.1", + "@typescript-eslint/parser": "^5.47.1", + "copyfiles": "^2.4.1", + "eslint": "^8.35.0", + "eslint-config-semistandard": "^15.0.1", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^5.1.0", + "eslint-plugin-standard": "^5.0.0", + "husky": "^7.0.2", + "ts-node": "^10.2.1", + "typescript": "^5.0.2", + "winston": "^3.13.0" + }, + "packageManager": "yarn@1.22.19+sha1.4ba7fc5c6e704fce2066ecbfb0b0d8976fe62447" +} diff --git a/src/artifacts/BundleRegistry.json b/src/artifacts/BundleRegistry.json new file mode 100644 index 0000000..765e25f --- /dev/null +++ b/src/artifacts/BundleRegistry.json @@ -0,0 +1,432 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "bundle", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "host", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "source", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "output", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "infoHash", + "type": "string" + }, + { + "indexed": false, + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "indexed": false, + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "BundleRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "toggle", + "type": "bool" + } + ], + "name": "BundleStateChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "bundles", + "outputs": [ + { + "internalType": "string", + "name": "bundle", + "type": "string" + }, + { + "internalType": "string", + "name": "source", + "type": "string" + }, + { + "internalType": "string", + "name": "host", + "type": "string" + }, + { + "internalType": "string", + "name": "output", + "type": "string" + }, + { + "internalType": "string", + "name": "info", + "type": "string" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "address", + "name": "author", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_bundle", + "type": "string" + }, + { + "internalType": "string", + "name": "_source", + "type": "string" + }, + { + "internalType": "string", + "name": "_host", + "type": "string" + }, + { + "internalType": "string", + "name": "_output", + "type": "string" + }, + { + "internalType": "string", + "name": "_infoHash", + "type": "string" + }, + { + "internalType": "bool", + "name": "_active", + "type": "bool" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_adapter", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_remainActive", + "type": "bool" + } + ], + "name": "setAdapterState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/DynamicJob.json b/src/artifacts/DynamicJob.json new file mode 100644 index 0000000..cd4df7d --- /dev/null +++ b/src/artifacts/DynamicJob.json @@ -0,0 +1,363 @@ +{ + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "name": "JobExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes[]", + "name": "jobInfo", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "targetAddresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ipfsForJobDetails", + "type": "string" + } + ], + "name": "JobRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toggle", + "type": "uint256" + } + ], + "name": "JobToggledByCreator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "creator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddresses", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "_userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "_strategyProvidedData", + "type": "bytes[]" + } + ], + "name": "executeJob", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gasBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "jobState", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keeperRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "orchestrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "address[]", + "name": "_targetAddresses", + "type": "address[]" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsForJobDetails", + "type": "string" + } + ], + "name": "registerJob", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "address[]", + "name": "_targetAddresses", + "type": "address[]" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsForJobDetails", + "type": "string" + } + ], + "name": "registerJobAndDepositGas", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_jobHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_toggle", + "type": "uint256" + } + ], + "name": "setJobState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + } + ], + "name": "withdrawGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/GasVault.json b/src/artifacts/GasVault.json new file mode 100644 index 0000000..9b04bad --- /dev/null +++ b/src/artifacts/GasVault.json @@ -0,0 +1,453 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "origin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + } + ], + "name": "EtherUsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "ethBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_targetAddress", + "type": "address" + } + ], + "name": "gasAvailableForTransaction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "_stratRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_vaultRegistry", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "orchestrator", + "outputs": [ + { + "internalType": "contract IOrchestrator", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "originalGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + } + ], + "name": "reimburseGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "strategyRegistry", + "outputs": [ + { + "internalType": "contract IStrategyRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "highGasEstimate", + "type": "uint256" + } + ], + "name": "transactionsRemaining", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vaultRegistry", + "outputs": [ + { + "internalType": "contract IVaultRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/KeeperRegistry.json b/src/artifacts/KeeperRegistry.json new file mode 100644 index 0000000..fd0f6f5 --- /dev/null +++ b/src/artifacts/KeeperRegistry.json @@ -0,0 +1,518 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "keeper", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leaveTimestamp", + "type": "uint256" + } + ], + "name": "LeaveQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_subject", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IKeeperRegistry.permissionType", + "name": "_permissionType", + "type": "uint8" + } + ], + "name": "PermissionChanged", + "type": "event" + }, + { + "inputs": [], + "name": "bondAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bondCoin", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "changeBondAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newNumKeepers", + "type": "uint16" + } + ], + "name": "changeMaxKeepers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "checkLicense", + "outputs": [ + { + "internalType": "uint256", + "name": "licenseNumber", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentNumKeepers", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetKeeper", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "denounce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "freeCoin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "coinAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keeperTransferDelay", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxKeepers", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bondSize", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "licenseNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "join", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "joiners", + "type": "address[]" + } + ], + "name": "joiningForOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "keeperLicenses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "leave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxNumKeepers", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queueToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "registry", + "outputs": [ + { + "internalType": "uint256", + "name": "bondHeld", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "licenseNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "leaveTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "transferDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "withdrawFreeCoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/Orchestrator.json b/src/artifacts/Orchestrator.json new file mode 100644 index 0000000..a45c656 --- /dev/null +++ b/src/artifacts/Orchestrator.json @@ -0,0 +1,491 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "actionHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewardPerAction", + "type": "uint256" + } + ], + "name": "ActionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "actionHash", + "type": "bytes32" + } + ], + "name": "ActionFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "actionHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "Vote", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + } + ], + "name": "_executeAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "actionHash", + "type": "bytes32" + } + ], + "name": "actionApprovalStatus", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "actionThresholdPercent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "actions", + "outputs": [ + { + "internalType": "enum IOrchestrator.ActionState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "jobEpoch", + "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "uint256[]", + "name": "timeIndependentLengths", + "type": "uint256[]" + }, + { + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + } + ], + "name": "executeAction", + "outputs": [ + { + "internalType": "enum IOrchestrator.ActionState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gasVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_keeperRegistry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_rewardPerAction", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "keeperRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rewardPerAction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_gasVault", + "type": "address" + } + ], + "name": "setGasVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_rewardPerAction", + "type": "uint256" + } + ], + "name": "setRewardPerAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "voteBitmaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "actionHash", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "vote", + "type": "bool" + } + ], + "name": "voteOnAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/StrategyRegistry.json b/src/artifacts/StrategyRegistry.json new file mode 100644 index 0000000..8538438 --- /dev/null +++ b/src/artifacts/StrategyRegistry.json @@ -0,0 +1,1142 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "StrategyCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GOVERNANCE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_tokenIdTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "strategyName", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "name": "createStrategy", + "outputs": [ + { + "internalType": "uint256", + "name": "newStrategyTokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRegisteredStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "internalType": "struct IStrategyRegistry.RegisteredStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hashedEmptyString", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "registry", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxMaxGasPerAction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "_maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "_maxGasPerAction", + "type": "uint128" + } + ], + "name": "setGasParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxMaxGasPerAction", + "type": "uint256" + } + ], + "name": "setMaxMaxGasPerAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "strategies", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "tokenIdToExecBundle", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/Vault.json b/src/artifacts/Vault.json new file mode 100644 index 0000000..cb1efb9 --- /dev/null +++ b/src/artifacts/Vault.json @@ -0,0 +1,1171 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount0Earned", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1Earned", + "type": "uint256" + } + ], + "name": "FeesEarned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "Snapshot", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STEER_FRACTION_OF_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOTAL_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Used", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Used", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "name": "emergencyBurn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getPositions", + "outputs": [ + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "", + "type": "uint16[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalAmounts", + "outputs": [ + { + "internalType": "uint256", + "name": "total0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vaultManager", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_steer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxTickChange", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pool", + "outputs": [ + { + "internalType": "contract IUniswapV3Pool", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "steerCollectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "strategistCollectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalWeight", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "int24[]", + "name": "lowerTick", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "upperTick", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "relativeWeight", + "type": "uint16[]" + } + ], + "internalType": "struct MultiPositionLiquidityManager.LiquidityPositions", + "name": "newPositions", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "timeSensitiveData", + "type": "bytes" + } + ], + "name": "tend", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "twapInterval", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Wanted", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Wanted", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/VaultRegistry.json b/src/artifacts/VaultRegistry.json new file mode 100644 index 0000000..f7952fa --- /dev/null +++ b/src/artifacts/VaultRegistry.json @@ -0,0 +1,1074 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "selectorLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "isImplementedLength", + "type": "uint256" + } + ], + "name": "IncorrectArrayLengths", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "_ipfsHash", + "type": "string" + } + ], + "name": "BeaconConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "BeaconDeregistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "_ipfsHash", + "type": "string" + } + ], + "name": "BeaconRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "deployer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "vaultManager", + "type": "address" + } + ], + "name": "VaultCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum VaultRegistry.VaultState", + "name": "newState", + "type": "uint8" + } + ], + "name": "VaultStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "beaconAddresses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "beaconTypes", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "_vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "_payloadIpfs", + "type": "string" + } + ], + "name": "createVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsConfigForBeacon", + "type": "string" + } + ], + "name": "deployAndRegisterBeacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "deregisterBeacon", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "doISupportInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vault", + "type": "address" + } + ], + "name": "getStrategyCreatorForVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_vaultId", + "type": "uint256" + } + ], + "name": "getVaultByStrategyAndIndex", + "outputs": [ + { + "components": [ + { + "internalType": "enum VaultRegistry.VaultState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "vaultID", + "type": "uint256" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + } + ], + "internalType": "struct VaultRegistry.VaultData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getVaultCountByStrategyId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "getVaultDetails", + "outputs": [ + { + "components": [ + { + "internalType": "enum VaultRegistry.VaultState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "vaultID", + "type": "uint256" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + } + ], + "internalType": "struct VaultRegistry.VaultData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "_strategyRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_whitelistRegistry", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "interfaceImplementations", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "linkedVaults", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "orchestrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "string", + "name": "_ipfsConfigForBeacon", + "type": "string" + } + ], + "name": "registerBeacon", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "strategyRegistry", + "outputs": [ + { + "internalType": "contract IStrategyRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalVaultCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_newIPFSConfigForBeacon", + "type": "string" + } + ], + "name": "updateBeaconConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "bytes4[]", + "name": "selectors", + "type": "bytes4[]" + }, + { + "internalType": "bool[]", + "name": "isImplemented", + "type": "bool[]" + } + ], + "name": "updateInterfaceImplementations", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vault", + "type": "address" + }, + { + "internalType": "enum VaultRegistry.VaultState", + "name": "_newState", + "type": "uint8" + } + ], + "name": "updateVaultState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "whitelistRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ] +} \ No newline at end of file diff --git a/src/artifacts/WhitelistRegistry.json b/src/artifacts/WhitelistRegistry.json new file mode 100644 index 0000000..5fc9c76 --- /dev/null +++ b/src/artifacts/WhitelistRegistry.json @@ -0,0 +1,165 @@ +{ + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "ManagerAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "whitelistManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "addressesAdded", + "type": "address[]" + } + ], + "name": "PermissionsAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "whitelistManager", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "addressesRemoved", + "type": "address[]" + } + ], + "name": "PermissionsRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vaultAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "addPermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "permissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "registerWhitelistManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vaultAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_addresses", + "type": "address[]" + } + ], + "name": "revokePermissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "whitelistManagers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ] +} \ No newline at end of file diff --git a/src/cli/checkpoint-cmds/create.ts b/src/cli/checkpoint-cmds/create.ts new file mode 100644 index 0000000..e771c70 --- /dev/null +++ b/src/cli/checkpoint-cmds/create.ts @@ -0,0 +1,44 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { CreateCheckpointCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../../database'; +import { Indexer } from '../../indexer'; + +export const command = 'create'; + +export const desc = 'Create checkpoint'; + +export const builder = { + address: { + type: 'string', + require: true, + demandOption: true, + describe: 'Contract address to create the checkpoint for.' + }, + blockHash: { + type: 'string', + describe: 'Blockhash at which to create the checkpoint.' + } +}; + +export const handler = async (argv: any): Promise => { + const createCheckpointCmd = new CreateCheckpointCmd(); + await createCheckpointCmd.init(argv, Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + createCheckpointCmd.config.server, + createCheckpointCmd.clients.ethClient, + createCheckpointCmd.ethProvider, + createCheckpointCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await createCheckpointCmd.initIndexer(Indexer, graphWatcher); + + await createCheckpointCmd.exec(); +}; diff --git a/src/cli/checkpoint-cmds/verify.ts b/src/cli/checkpoint-cmds/verify.ts new file mode 100644 index 0000000..3709f54 --- /dev/null +++ b/src/cli/checkpoint-cmds/verify.ts @@ -0,0 +1,40 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { VerifyCheckpointCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../../database'; +import { Indexer } from '../../indexer'; + +export const command = 'verify'; + +export const desc = 'Verify checkpoint'; + +export const builder = { + cid: { + type: 'string', + alias: 'c', + demandOption: true, + describe: 'Checkpoint CID to be verified' + } +}; + +export const handler = async (argv: any): Promise => { + const verifyCheckpointCmd = new VerifyCheckpointCmd(); + await verifyCheckpointCmd.init(argv, Database); + + const { graphWatcher, graphDb } = await getGraphDbAndWatcher( + verifyCheckpointCmd.config.server, + verifyCheckpointCmd.clients.ethClient, + verifyCheckpointCmd.ethProvider, + verifyCheckpointCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await verifyCheckpointCmd.initIndexer(Indexer, graphWatcher); + + await verifyCheckpointCmd.exec(graphDb); +}; diff --git a/src/cli/checkpoint.ts b/src/cli/checkpoint.ts new file mode 100644 index 0000000..d05ad8a --- /dev/null +++ b/src/cli/checkpoint.ts @@ -0,0 +1,39 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import yargs from 'yargs'; +import 'reflect-metadata'; +import debug from 'debug'; + +import { DEFAULT_CONFIG_PATH } from '@cerc-io/util'; + +import { hideBin } from 'yargs/helpers'; + +const log = debug('vulcanize:checkpoint'); + +const main = async () => { + return yargs(hideBin(process.argv)) + .parserConfiguration({ + 'parse-numbers': false + }).options({ + configFile: { + alias: 'f', + type: 'string', + require: true, + demandOption: true, + describe: 'configuration file path (toml)', + default: DEFAULT_CONFIG_PATH + } + }) + .commandDir('checkpoint-cmds', { extensions: ['ts', 'js'], exclude: /([a-zA-Z0-9\s_\\.\-:])+(.d.ts)$/ }) + .demandCommand(1) + .help() + .argv; +}; + +main().then(() => { + process.exit(); +}).catch(err => { + log(err); +}); diff --git a/src/cli/export-state.ts b/src/cli/export-state.ts new file mode 100644 index 0000000..bcd1c8a --- /dev/null +++ b/src/cli/export-state.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { ExportStateCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:export-state'); + +const main = async (): Promise => { + const exportStateCmd = new ExportStateCmd(); + await exportStateCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + exportStateCmd.config.server, + exportStateCmd.clients.ethClient, + exportStateCmd.ethProvider, + exportStateCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await exportStateCmd.initIndexer(Indexer, graphWatcher); + + await exportStateCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/src/cli/import-state.ts b/src/cli/import-state.ts new file mode 100644 index 0000000..04ce0e8 --- /dev/null +++ b/src/cli/import-state.ts @@ -0,0 +1,39 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { ImportStateCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; +import { State } from '../entity/State'; + +const log = debug('vulcanize:import-state'); + +export const main = async (): Promise => { + const importStateCmd = new ImportStateCmd(); + await importStateCmd.init(Database); + + const { graphWatcher, graphDb } = await getGraphDbAndWatcher( + importStateCmd.config.server, + importStateCmd.clients.ethClient, + importStateCmd.ethProvider, + importStateCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await importStateCmd.initIndexer(Indexer, graphWatcher); + + await importStateCmd.exec(State, graphDb); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/src/cli/index-block.ts b/src/cli/index-block.ts new file mode 100644 index 0000000..19a302a --- /dev/null +++ b/src/cli/index-block.ts @@ -0,0 +1,38 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { IndexBlockCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:index-block'); + +const main = async (): Promise => { + const indexBlockCmd = new IndexBlockCmd(); + await indexBlockCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + indexBlockCmd.config.server, + indexBlockCmd.clients.ethClient, + indexBlockCmd.ethProvider, + indexBlockCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await indexBlockCmd.initIndexer(Indexer, graphWatcher); + + await indexBlockCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/src/cli/inspect-cid.ts b/src/cli/inspect-cid.ts new file mode 100644 index 0000000..4f5955e --- /dev/null +++ b/src/cli/inspect-cid.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { InspectCIDCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:inspect-cid'); + +const main = async (): Promise => { + const inspectCIDCmd = new InspectCIDCmd(); + await inspectCIDCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + inspectCIDCmd.config.server, + inspectCIDCmd.clients.ethClient, + inspectCIDCmd.ethProvider, + inspectCIDCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await inspectCIDCmd.initIndexer(Indexer, graphWatcher); + + await inspectCIDCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/src/cli/reset-cmds/job-queue.ts b/src/cli/reset-cmds/job-queue.ts new file mode 100644 index 0000000..c33cbfd --- /dev/null +++ b/src/cli/reset-cmds/job-queue.ts @@ -0,0 +1,22 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import debug from 'debug'; + +import { getConfig, resetJobs, Config } from '@cerc-io/util'; + +const log = debug('vulcanize:reset-job-queue'); + +export const command = 'job-queue'; + +export const desc = 'Reset job queue'; + +export const builder = {}; + +export const handler = async (argv: any): Promise => { + const config: Config = await getConfig(argv.configFile); + await resetJobs(config); + + log('Job queue reset successfully'); +}; diff --git a/src/cli/reset-cmds/state.ts b/src/cli/reset-cmds/state.ts new file mode 100644 index 0000000..33211d6 --- /dev/null +++ b/src/cli/reset-cmds/state.ts @@ -0,0 +1,24 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { ResetStateCmd } from '@cerc-io/cli'; + +import { Database } from '../../database'; + +export const command = 'state'; + +export const desc = 'Reset State to a given block number'; + +export const builder = { + blockNumber: { + type: 'number' + } +}; + +export const handler = async (argv: any): Promise => { + const resetStateCmd = new ResetStateCmd(); + await resetStateCmd.init(argv, Database); + + await resetStateCmd.exec(); +}; diff --git a/src/cli/reset-cmds/watcher.ts b/src/cli/reset-cmds/watcher.ts new file mode 100644 index 0000000..827fd28 --- /dev/null +++ b/src/cli/reset-cmds/watcher.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { ResetWatcherCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../../database'; +import { Indexer } from '../../indexer'; + +export const command = 'watcher'; + +export const desc = 'Reset watcher to a block number'; + +export const builder = { + blockNumber: { + type: 'number' + } +}; + +export const handler = async (argv: any): Promise => { + const resetWatcherCmd = new ResetWatcherCmd(); + await resetWatcherCmd.init(argv, Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + resetWatcherCmd.config.server, + resetWatcherCmd.clients.ethClient, + resetWatcherCmd.ethProvider, + resetWatcherCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await resetWatcherCmd.initIndexer(Indexer, graphWatcher); + + await resetWatcherCmd.exec(); +}; diff --git a/src/cli/reset.ts b/src/cli/reset.ts new file mode 100644 index 0000000..95648c8 --- /dev/null +++ b/src/cli/reset.ts @@ -0,0 +1,24 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { getResetYargs } from '@cerc-io/util'; + +const log = debug('vulcanize:reset'); + +const main = async () => { + return getResetYargs() + .commandDir('reset-cmds', { extensions: ['ts', 'js'], exclude: /([a-zA-Z0-9\s_\\.\-:])+(.d.ts)$/ }) + .demandCommand(1) + .help() + .argv; +}; + +main().then(() => { + process.exit(); +}).catch(err => { + log(err); +}); diff --git a/src/cli/watch-contract.ts b/src/cli/watch-contract.ts new file mode 100644 index 0000000..7d6ce1a --- /dev/null +++ b/src/cli/watch-contract.ts @@ -0,0 +1,38 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { WatchContractCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from '../database'; +import { Indexer } from '../indexer'; + +const log = debug('vulcanize:watch-contract'); + +const main = async (): Promise => { + const watchContractCmd = new WatchContractCmd(); + await watchContractCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + watchContractCmd.config.server, + watchContractCmd.clients.ethClient, + watchContractCmd.ethProvider, + watchContractCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await watchContractCmd.initIndexer(Indexer, graphWatcher); + + await watchContractCmd.exec(); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(0); +}); diff --git a/src/client.ts b/src/client.ts new file mode 100644 index 0000000..8bb2bb0 --- /dev/null +++ b/src/client.ts @@ -0,0 +1,55 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { gql } from '@apollo/client/core'; +import { GraphQLClient, GraphQLConfig } from '@cerc-io/ipld-eth-client'; + +import { queries, mutations, subscriptions } from './gql'; + +export class Client { + _config: GraphQLConfig; + _client: GraphQLClient; + + constructor (config: GraphQLConfig) { + this._config = config; + + this._client = new GraphQLClient(config); + } + + async getEvents (blockHash: string, contractAddress: string, name: string): Promise { + const { events } = await this._client.query( + gql(queries.events), + { blockHash, contractAddress, name } + ); + + return events; + } + + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise { + const { eventsInRange } = await this._client.query( + gql(queries.eventsInRange), + { fromBlockNumber, toBlockNumber } + ); + + return eventsInRange; + } + + async watchContract (contractAddress: string, startingBlock?: number): Promise { + const { watchContract } = await this._client.mutate( + gql(mutations.watchContract), + { contractAddress, startingBlock } + ); + + return watchContract; + } + + async watchEvents (onNext: (value: any) => void): Promise { + return this._client.subscribe( + gql(subscriptions.onEvent), + ({ data }) => { + onNext(data.onEvent); + } + ); + } +} diff --git a/src/database.ts b/src/database.ts new file mode 100644 index 0000000..d73a79f --- /dev/null +++ b/src/database.ts @@ -0,0 +1,329 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; +import { Connection, ConnectionOptions, DeepPartial, FindConditions, QueryRunner, FindManyOptions, EntityTarget } from 'typeorm'; +import path from 'path'; + +import { + ENTITY_QUERY_TYPE, + Database as BaseDatabase, + DatabaseInterface, + QueryOptions, + StateKind, + Where +} from '@cerc-io/util'; + +import { Contract } from './entity/Contract'; +import { Event } from './entity/Event'; +import { SyncStatus } from './entity/SyncStatus'; +import { StateSyncStatus } from './entity/StateSyncStatus'; +import { BlockProgress } from './entity/BlockProgress'; +import { State } from './entity/State'; +import { Keeper } from './entity/Keeper'; +import { Runner } from './entity/Runner'; +import { QueueTimeline } from './entity/QueueTimeline'; +import { PermissionUpdate } from './entity/PermissionUpdate'; +import { OrchestratorAction } from './entity/OrchestratorAction'; +import { Vote } from './entity/Vote'; +import { ActionFailure } from './entity/ActionFailure'; +import { Creator } from './entity/Creator'; +import { CreatorWithdrawal } from './entity/CreatorWithdrawal'; +import { Strategy } from './entity/Strategy'; +import { Vault } from './entity/Vault'; +import { VaultSnapshot } from './entity/VaultSnapshot'; +import { PrevVaultSnapshot } from './entity/PrevVaultSnapshot'; +import { PrevDailyVaultSnapshot } from './entity/PrevDailyVaultSnapshot'; +import { PrevMonthlyVaultSnapshot } from './entity/PrevMonthlyVaultSnapshot'; +import { PrevAnnualVaultSnapshot } from './entity/PrevAnnualVaultSnapshot'; +import { PrevWeeklyVaultSnapshot } from './entity/PrevWeeklyVaultSnapshot'; +import { VaultStateChanged } from './entity/VaultStateChanged'; +import { VaultDeposit } from './entity/VaultDeposit'; +import { VaultWithdraw } from './entity/VaultWithdraw'; +import { Depositor } from './entity/Depositor'; +import { VaultBeacon } from './entity/VaultBeacon'; +import { VaultPosition } from './entity/VaultPosition'; +import { LiquiditySteer } from './entity/LiquiditySteer'; +import { OrchestratorReward } from './entity/OrchestratorReward'; +import { OrchestratorRewardTracker } from './entity/OrchestratorRewardTracker'; +import { OrchestratorRewardSnapshot } from './entity/OrchestratorRewardSnapshot'; +import { Bundle } from './entity/Bundle'; +import { Job } from './entity/Job'; +import { JobExecution } from './entity/JobExecution'; +import { JobGasDeposited } from './entity/JobGasDeposited'; +import { JobGasWithdrawn } from './entity/JobGasWithdrawn'; +import { VaultGasUsed } from './entity/VaultGasUsed'; +import { VaultGasDeposited } from './entity/VaultGasDeposited'; +import { VaultGasWithdrawn } from './entity/VaultGasWithdrawn'; +import { WhiteListManager } from './entity/WhiteListManager'; +import { WhiteListVaultPermission } from './entity/WhiteListVaultPermission'; +import { LeaderBoard } from './entity/LeaderBoard'; +import { VaultTransfer } from './entity/VaultTransfer'; + +export const SUBGRAPH_ENTITIES = new Set([Keeper, Runner, QueueTimeline, PermissionUpdate, OrchestratorAction, Vote, ActionFailure, Creator, CreatorWithdrawal, Strategy, Vault, VaultSnapshot, PrevVaultSnapshot, PrevDailyVaultSnapshot, PrevMonthlyVaultSnapshot, PrevAnnualVaultSnapshot, PrevWeeklyVaultSnapshot, VaultStateChanged, VaultDeposit, VaultWithdraw, Depositor, VaultBeacon, VaultPosition, LiquiditySteer, OrchestratorReward, OrchestratorRewardTracker, OrchestratorRewardSnapshot, Bundle, Job, JobExecution, JobGasDeposited, JobGasWithdrawn, VaultGasUsed, VaultGasDeposited, VaultGasWithdrawn, WhiteListManager, WhiteListVaultPermission, LeaderBoard, VaultTransfer]); +export const ENTITIES = [...SUBGRAPH_ENTITIES]; +// Map: Entity to suitable query type. +export const ENTITY_QUERY_TYPE_MAP = new Map any, ENTITY_QUERY_TYPE>([]); + +export const ENTITY_TO_LATEST_ENTITY_MAP: Map = new Map(); + +export class Database implements DatabaseInterface { + _config: ConnectionOptions; + _conn!: Connection; + _baseDatabase: BaseDatabase; + _propColMaps: { [key: string]: Map; }; + + constructor (config: ConnectionOptions) { + assert(config); + + this._config = { + ...config, + subscribers: [path.join(__dirname, 'entity/Subscriber.*')], + entities: [path.join(__dirname, 'entity/*')] + }; + + this._baseDatabase = new BaseDatabase(this._config); + this._propColMaps = {}; + } + + get baseDatabase (): BaseDatabase { + return this._baseDatabase; + } + + async init (): Promise { + this._conn = await this._baseDatabase.init(); + } + + async close (): Promise { + return this._baseDatabase.close(); + } + + getNewState (): State { + return new State(); + } + + async getStates (where: FindConditions): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getStates(repo, where); + } + + async getLatestState (contractAddress: string, kind: StateKind | null, blockNumber?: number): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getLatestState(repo, contractAddress, kind, blockNumber); + } + + async getPrevState (blockHash: string, contractAddress: string, kind?: string): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getPrevState(repo, blockHash, contractAddress, kind); + } + + // Fetch all diff States after the specified block number. + async getDiffStatesInRange (contractAddress: string, startblock: number, endBlock: number): Promise { + const repo = this._conn.getRepository(State); + + return this._baseDatabase.getDiffStatesInRange(repo, contractAddress, startblock, endBlock); + } + + async saveOrUpdateState (dbTx: QueryRunner, state: State): Promise { + const repo = dbTx.manager.getRepository(State); + + return this._baseDatabase.saveOrUpdateState(repo, state); + } + + async removeStates (dbTx: QueryRunner, blockNumber: number, kind: string): Promise { + const repo = dbTx.manager.getRepository(State); + + await this._baseDatabase.removeStates(repo, blockNumber, kind); + } + + async removeStatesAfterBlock (dbTx: QueryRunner, blockNumber: number): Promise { + const repo = dbTx.manager.getRepository(State); + + await this._baseDatabase.removeStatesAfterBlock(repo, blockNumber); + } + + async getStateSyncStatus (): Promise { + const repo = this._conn.getRepository(StateSyncStatus); + + return this._baseDatabase.getStateSyncStatus(repo); + } + + async updateStateSyncStatusIndexedBlock (queryRunner: QueryRunner, blockNumber: number, force?: boolean): Promise { + const repo = queryRunner.manager.getRepository(StateSyncStatus); + + return this._baseDatabase.updateStateSyncStatusIndexedBlock(repo, blockNumber, force); + } + + async updateStateSyncStatusCheckpointBlock (queryRunner: QueryRunner, blockNumber: number, force?: boolean): Promise { + const repo = queryRunner.manager.getRepository(StateSyncStatus); + + return this._baseDatabase.updateStateSyncStatusCheckpointBlock(repo, blockNumber, force); + } + + async getContracts (): Promise { + const repo = this._conn.getRepository(Contract); + + return this._baseDatabase.getContracts(repo); + } + + async createTransactionRunner (): Promise { + return this._baseDatabase.createTransactionRunner(); + } + + async getProcessedBlockCountForRange (fromBlockNumber: number, toBlockNumber: number): Promise<{ expected: number, actual: number }> { + const repo = this._conn.getRepository(BlockProgress); + + return this._baseDatabase.getProcessedBlockCountForRange(repo, fromBlockNumber, toBlockNumber); + } + + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise> { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getEventsInRange(repo, fromBlockNumber, toBlockNumber); + } + + async getEvents (options: FindManyOptions): Promise> { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getEvents(repo, options); + } + + async saveEventEntity (queryRunner: QueryRunner, entity: Event): Promise { + const repo = queryRunner.manager.getRepository(Event); + return this._baseDatabase.saveEventEntity(repo, entity); + } + + async getBlockEvents (blockHash: string, where: Where, queryOptions: QueryOptions): Promise { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getBlockEvents(repo, blockHash, where, queryOptions); + } + + async saveBlockWithEvents (queryRunner: QueryRunner, block: DeepPartial, events: DeepPartial[]): Promise { + const blockRepo = queryRunner.manager.getRepository(BlockProgress); + const eventRepo = queryRunner.manager.getRepository(Event); + + return this._baseDatabase.saveBlockWithEvents(blockRepo, eventRepo, block, events); + } + + async saveEvents (queryRunner: QueryRunner, events: Event[]): Promise { + const eventRepo = queryRunner.manager.getRepository(Event); + + return this._baseDatabase.saveEvents(eventRepo, events); + } + + async saveBlockProgress (queryRunner: QueryRunner, block: DeepPartial): Promise { + const repo = queryRunner.manager.getRepository(BlockProgress); + + return this._baseDatabase.saveBlockProgress(repo, block); + } + + async saveContract (queryRunner: QueryRunner, address: string, kind: string, checkpoint: boolean, startingBlock: number, context?: any): Promise { + const repo = queryRunner.manager.getRepository(Contract); + + return this._baseDatabase.saveContract(repo, address, kind, checkpoint, startingBlock, context); + } + + async updateSyncStatusIndexedBlock (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusIndexedBlock(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusCanonicalBlock (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusCanonicalBlock(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusChainHead (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusChainHead(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusProcessedBlock (queryRunner: QueryRunner, blockHash: string, blockNumber: number, force = false): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusProcessedBlock(repo, blockHash, blockNumber, force); + } + + async updateSyncStatusIndexingError (queryRunner: QueryRunner, hasIndexingError: boolean): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatusIndexingError(repo, hasIndexingError); + } + + async updateSyncStatus (queryRunner: QueryRunner, syncStatus: DeepPartial): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.updateSyncStatus(repo, syncStatus); + } + + async getSyncStatus (queryRunner: QueryRunner): Promise { + const repo = queryRunner.manager.getRepository(SyncStatus); + + return this._baseDatabase.getSyncStatus(repo); + } + + async getEvent (id: string): Promise { + const repo = this._conn.getRepository(Event); + + return this._baseDatabase.getEvent(repo, id); + } + + async getBlocksAtHeight (height: number, isPruned: boolean): Promise { + const repo = this._conn.getRepository(BlockProgress); + + return this._baseDatabase.getBlocksAtHeight(repo, height, isPruned); + } + + async markBlocksAsPruned (queryRunner: QueryRunner, blocks: BlockProgress[]): Promise { + const repo = queryRunner.manager.getRepository(BlockProgress); + + return this._baseDatabase.markBlocksAsPruned(repo, blocks); + } + + async getBlockProgress (blockHash: string): Promise { + const repo = this._conn.getRepository(BlockProgress); + return this._baseDatabase.getBlockProgress(repo, blockHash); + } + + async getBlockProgressEntities (where: FindConditions, options: FindManyOptions): Promise { + const repo = this._conn.getRepository(BlockProgress); + + return this._baseDatabase.getBlockProgressEntities(repo, where, options); + } + + async getEntitiesForBlock (blockHash: string, tableName: string): Promise { + return this._baseDatabase.getEntitiesForBlock(blockHash, tableName); + } + + async updateBlockProgress (queryRunner: QueryRunner, block: BlockProgress, lastProcessedEventIndex: number): Promise { + const repo = queryRunner.manager.getRepository(BlockProgress); + + return this._baseDatabase.updateBlockProgress(repo, block, lastProcessedEventIndex); + } + + async removeEntities (queryRunner: QueryRunner, entity: new () => Entity, findConditions?: FindManyOptions | FindConditions): Promise { + return this._baseDatabase.removeEntities(queryRunner, entity, findConditions); + } + + async deleteEntitiesByConditions (queryRunner: QueryRunner, entity: EntityTarget, findConditions: FindConditions): Promise { + await this._baseDatabase.deleteEntitiesByConditions(queryRunner, entity, findConditions); + } + + async getAncestorAtHeight (blockHash: string, height: number): Promise { + return this._baseDatabase.getAncestorAtHeight(blockHash, height); + } + + _getPropertyColumnMapForEntity (entityName: string): Map { + return this._conn.getMetadata(entityName).ownColumns.reduce((acc, curr) => { + return acc.set(curr.propertyName, curr.databaseName); + }, new Map()); + } +} diff --git a/src/entity/ActionFailure.ts b/src/entity/ActionFailure.ts new file mode 100644 index 0000000..618ebf6 --- /dev/null +++ b/src/entity/ActionFailure.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class ActionFailure { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + method!: bigint; + + @Column('varchar') + action!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/BlockProgress.ts b/src/entity/BlockProgress.ts new file mode 100644 index 0000000..ded4a86 --- /dev/null +++ b/src/entity/BlockProgress.ts @@ -0,0 +1,48 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index, CreateDateColumn } from 'typeorm'; +import { BlockProgressInterface } from '@cerc-io/util'; + +@Entity() +@Index(['blockHash'], { unique: true }) +@Index(['blockNumber']) +@Index(['parentHash']) +export class BlockProgress implements BlockProgressInterface { + @PrimaryGeneratedColumn() + id!: number; + + @Column('varchar', { nullable: true }) + cid!: string | null; + + @Column('varchar', { length: 66 }) + blockHash!: string; + + @Column('varchar', { length: 66 }) + parentHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('integer') + blockTimestamp!: number; + + @Column('integer') + numEvents!: number; + + @Column('integer') + numProcessedEvents!: number; + + @Column('integer') + lastProcessedEventIndex!: number; + + @Column('boolean') + isComplete!: boolean; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @CreateDateColumn() + createdAt!: Date; +} diff --git a/src/entity/Bundle.ts b/src/entity/Bundle.ts new file mode 100644 index 0000000..06ca73c --- /dev/null +++ b/src/entity/Bundle.ts @@ -0,0 +1,52 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Bundle { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + createdAt!: bigint; + + @Column('varchar') + bundle!: string; + + @Column('varchar') + creator!: string; + + @Column('varchar') + host!: string; + + @Column('varchar') + source!: string; + + @Column('varchar') + output!: string; + + @Column('boolean') + active!: boolean; + + @Column('varchar') + infoHash!: string; + + @Column('varchar') + hash!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Contract.ts b/src/entity/Contract.ts new file mode 100644 index 0000000..604d04f --- /dev/null +++ b/src/entity/Contract.ts @@ -0,0 +1,27 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index } from 'typeorm'; + +@Entity() +@Index(['address', 'kind'], { unique: true }) +export class Contract { + @PrimaryGeneratedColumn() + id!: number; + + @Column('varchar', { length: 42 }) + address!: string; + + @Column('varchar') + kind!: string; + + @Column('boolean') + checkpoint!: boolean; + + @Column('integer') + startingBlock!: number; + + @Column('jsonb', { nullable: true }) + context!: Record; +} diff --git a/src/entity/Creator.ts b/src/entity/Creator.ts new file mode 100644 index 0000000..b894f0f --- /dev/null +++ b/src/entity/Creator.ts @@ -0,0 +1,35 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Creator { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: decimalTransformer }) + revenue!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLocked!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalYield!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/CreatorWithdrawal.ts b/src/entity/CreatorWithdrawal.ts new file mode 100644 index 0000000..bd0accc --- /dev/null +++ b/src/entity/CreatorWithdrawal.ts @@ -0,0 +1,35 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class CreatorWithdrawal { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('varchar') + creator!: string; + + @Column('numeric', { transformer: decimalTransformer }) + amount!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Depositor.ts b/src/entity/Depositor.ts new file mode 100644 index 0000000..dcf0824 --- /dev/null +++ b/src/entity/Depositor.ts @@ -0,0 +1,64 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Depositor { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + vault!: string; + + @Column('varchar') + account!: string; + + @Column('varchar') + executor!: string; + + @Column('varchar') + depositCaller!: string; + + @Column('numeric', { transformer: bigintTransformer }) + depositedAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + depositedAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + withdrawnAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + withdrawnAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + liquidityAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + createdTimestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + updatedTimestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + shares!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Event.ts b/src/entity/Event.ts new file mode 100644 index 0000000..7de5631 --- /dev/null +++ b/src/entity/Event.ts @@ -0,0 +1,53 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index, ManyToOne } from 'typeorm'; +import { BlockProgress } from './BlockProgress'; + +@Entity() +@Index(['block', 'contract']) +@Index(['block', 'contract', 'eventName']) +export class Event { + @PrimaryGeneratedColumn() + id!: number; + + @ManyToOne(() => BlockProgress, { onDelete: 'CASCADE' }) + block!: BlockProgress; + + @Column('varchar', { length: 66 }) + txHash!: string; + + @Column('integer') + index!: number; + + @Column('varchar', { length: 42 }) + contract!: string; + + @Column('varchar', { length: 256 }) + eventName!: string; + + @Column('varchar', { length: 66 }) + topic0!: string; + + @Column('varchar', { length: 66, nullable: true }) + topic1!: string | null; + + @Column('varchar', { length: 66, nullable: true }) + topic2!: string | null; + + @Column('varchar', { length: 66, nullable: true }) + topic3!: string | null; + + @Column('varchar') + data!: string; + + @Column('text') + eventInfo!: string; + + @Column('text') + extraInfo!: string; + + @Column('text') + proof!: string; +} diff --git a/src/entity/FrothyEntity.ts b/src/entity/FrothyEntity.ts new file mode 100644 index 0000000..9898ce8 --- /dev/null +++ b/src/entity/FrothyEntity.ts @@ -0,0 +1,21 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; + +@Entity() +@Index(['blockNumber']) +export class FrothyEntity { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar') + name!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; +} diff --git a/src/entity/Job.ts b/src/entity/Job.ts new file mode 100644 index 0000000..a6ad00b --- /dev/null +++ b/src/entity/Job.ts @@ -0,0 +1,55 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Job { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + name!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar', { array: true }) + jobInfo!: string[]; + + @Column('varchar', { array: true }) + targetAddresses!: string[]; + + @Column('varchar') + ipfsHash!: string; + + @Column('numeric', { transformer: bigintTransformer }) + status!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + failedCounts!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('varchar') + jobHash!: string; + + @Column('numeric', { transformer: bigintTransformer }) + gasUsed!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/JobExecution.ts b/src/entity/JobExecution.ts new file mode 100644 index 0000000..6d7ba2c --- /dev/null +++ b/src/entity/JobExecution.ts @@ -0,0 +1,43 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class JobExecution { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + jobHash!: string; + + @Column('varchar') + executor!: string; + + @Column('varchar') + status!: string; + + @Column('varchar') + jobIdString!: string; + + @Column('varchar') + jobId!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/JobGasDeposited.ts b/src/entity/JobGasDeposited.ts new file mode 100644 index 0000000..e44a7a6 --- /dev/null +++ b/src/entity/JobGasDeposited.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class JobGasDeposited { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + creator!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/JobGasWithdrawn.ts b/src/entity/JobGasWithdrawn.ts new file mode 100644 index 0000000..fc7f8f6 --- /dev/null +++ b/src/entity/JobGasWithdrawn.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class JobGasWithdrawn { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + creator!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Keeper.ts b/src/entity/Keeper.ts new file mode 100644 index 0000000..b68d8be --- /dev/null +++ b/src/entity/Keeper.ts @@ -0,0 +1,35 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Keeper { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: decimalTransformer }) + bondHeld!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + index!: bigint; + + @Column('varchar') + status!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/LeaderBoard.ts b/src/entity/LeaderBoard.ts new file mode 100644 index 0000000..a24f06d --- /dev/null +++ b/src/entity/LeaderBoard.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class LeaderBoard { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + address!: string; + + @Column('numeric', { transformer: bigintTransformer }) + numStaticJobs!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + numApps!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/LiquiditySteer.ts b/src/entity/LiquiditySteer.ts new file mode 100644 index 0000000..43b8c16 --- /dev/null +++ b/src/entity/LiquiditySteer.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class LiquiditySteer { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + vault!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + tick!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/OrchestratorAction.ts b/src/entity/OrchestratorAction.ts new file mode 100644 index 0000000..71373eb --- /dev/null +++ b/src/entity/OrchestratorAction.ts @@ -0,0 +1,55 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class OrchestratorAction { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + from!: string; + + @Column('numeric', { nullable: true, transformer: bigintTransformer }) + lastUpdated!: bigint | null; + + @Column('varchar') + state!: string; + + @Column('varchar') + status!: string; + + @Column('varchar', { array: true, nullable: true }) + recipients!: string | null; + + @Column('varchar') + vault!: string; + + @Column('varchar') + transactionHash!: string; + + @Column('varchar') + hash!: string; + + @Column('numeric', { transformer: bigintTransformer }) + gasUsed!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/OrchestratorReward.ts b/src/entity/OrchestratorReward.ts new file mode 100644 index 0000000..5382999 --- /dev/null +++ b/src/entity/OrchestratorReward.ts @@ -0,0 +1,40 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class OrchestratorReward { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + updatedTimeStamp!: bigint; + + @Column('varchar') + address!: string; + + @Column('numeric', { transformer: bigintTransformer }) + reward!: bigint; + + @Column('varchar') + trackerId!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/OrchestratorRewardSnapshot.ts b/src/entity/OrchestratorRewardSnapshot.ts new file mode 100644 index 0000000..8a7fa51 --- /dev/null +++ b/src/entity/OrchestratorRewardSnapshot.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class OrchestratorRewardSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + updatedTimeStamp!: bigint; + + @Column('varchar') + address!: string; + + @Column('numeric', { transformer: bigintTransformer }) + reward!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/OrchestratorRewardTracker.ts b/src/entity/OrchestratorRewardTracker.ts new file mode 100644 index 0000000..30f07d5 --- /dev/null +++ b/src/entity/OrchestratorRewardTracker.ts @@ -0,0 +1,28 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class OrchestratorRewardTracker { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/PermissionUpdate.ts b/src/entity/PermissionUpdate.ts new file mode 100644 index 0000000..f69f4c6 --- /dev/null +++ b/src/entity/PermissionUpdate.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class PermissionUpdate { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + keeper!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('varchar') + action!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/PrevAnnualVaultSnapshot.ts b/src/entity/PrevAnnualVaultSnapshot.ts new file mode 100644 index 0000000..42dc560 --- /dev/null +++ b/src/entity/PrevAnnualVaultSnapshot.ts @@ -0,0 +1,49 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class PrevAnnualVaultSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/PrevDailyVaultSnapshot.ts b/src/entity/PrevDailyVaultSnapshot.ts new file mode 100644 index 0000000..abc29b7 --- /dev/null +++ b/src/entity/PrevDailyVaultSnapshot.ts @@ -0,0 +1,49 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class PrevDailyVaultSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/PrevMonthlyVaultSnapshot.ts b/src/entity/PrevMonthlyVaultSnapshot.ts new file mode 100644 index 0000000..64344ec --- /dev/null +++ b/src/entity/PrevMonthlyVaultSnapshot.ts @@ -0,0 +1,49 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class PrevMonthlyVaultSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/PrevVaultSnapshot.ts b/src/entity/PrevVaultSnapshot.ts new file mode 100644 index 0000000..954172c --- /dev/null +++ b/src/entity/PrevVaultSnapshot.ts @@ -0,0 +1,49 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class PrevVaultSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/PrevWeeklyVaultSnapshot.ts b/src/entity/PrevWeeklyVaultSnapshot.ts new file mode 100644 index 0000000..751745d --- /dev/null +++ b/src/entity/PrevWeeklyVaultSnapshot.ts @@ -0,0 +1,59 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class PrevWeeklyVaultSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + averageFeeArrPerSecond!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + totalSnapshots!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + weeklyFeeApr!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/QueueTimeline.ts b/src/entity/QueueTimeline.ts new file mode 100644 index 0000000..4e9c40d --- /dev/null +++ b/src/entity/QueueTimeline.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class QueueTimeline { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + keeper!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeDelay!: bigint; + + @Column('boolean') + queued!: boolean; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Runner.ts b/src/entity/Runner.ts new file mode 100644 index 0000000..dcb644a --- /dev/null +++ b/src/entity/Runner.ts @@ -0,0 +1,31 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Runner { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + bondHeld!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + createdAt!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/State.ts b/src/entity/State.ts new file mode 100644 index 0000000..bc05bca --- /dev/null +++ b/src/entity/State.ts @@ -0,0 +1,31 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column, Index, ManyToOne } from 'typeorm'; +import { StateKind } from '@cerc-io/util'; +import { BlockProgress } from './BlockProgress'; + +@Entity() +@Index(['cid'], { unique: true }) +@Index(['block', 'contractAddress']) +@Index(['block', 'contractAddress', 'kind'], { unique: true }) +export class State { + @PrimaryGeneratedColumn() + id!: number; + + @ManyToOne(() => BlockProgress, { onDelete: 'CASCADE' }) + block!: BlockProgress; + + @Column('varchar', { length: 42 }) + contractAddress!: string; + + @Column('varchar') + cid!: string; + + @Column({ type: 'enum', enum: StateKind }) + kind!: StateKind; + + @Column('bytea') + data!: Buffer; +} diff --git a/src/entity/StateSyncStatus.ts b/src/entity/StateSyncStatus.ts new file mode 100644 index 0000000..1535eb4 --- /dev/null +++ b/src/entity/StateSyncStatus.ts @@ -0,0 +1,17 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; + +@Entity() +export class StateSyncStatus { + @PrimaryGeneratedColumn() + id!: number; + + @Column('integer') + latestIndexedBlockNumber!: number; + + @Column('integer') + latestCheckpointBlockNumber!: number; +} diff --git a/src/entity/Strategy.ts b/src/entity/Strategy.ts new file mode 100644 index 0000000..807fcf3 --- /dev/null +++ b/src/entity/Strategy.ts @@ -0,0 +1,40 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Strategy { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + name!: string; + + @Column('numeric', { transformer: bigintTransformer }) + createdAt!: bigint; + + @Column('varchar') + admin!: string; + + @Column('varchar') + creator!: string; + + @Column('varchar') + executionBundle!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Subscriber.ts b/src/entity/Subscriber.ts new file mode 100644 index 0000000..2cccb84 --- /dev/null +++ b/src/entity/Subscriber.ts @@ -0,0 +1,21 @@ +// +// Copyright 2022 Vulcanize, Inc. +// + +import { EventSubscriber, EntitySubscriberInterface, InsertEvent, UpdateEvent } from 'typeorm'; + +import { afterEntityInsertOrUpdate } from '@cerc-io/util'; + +import { FrothyEntity } from './FrothyEntity'; +import { ENTITY_TO_LATEST_ENTITY_MAP, SUBGRAPH_ENTITIES } from '../database'; + +@EventSubscriber() +export class EntitySubscriber implements EntitySubscriberInterface { + async afterInsert (event: InsertEvent): Promise { + await afterEntityInsertOrUpdate(FrothyEntity, SUBGRAPH_ENTITIES, event, ENTITY_TO_LATEST_ENTITY_MAP); + } + + async afterUpdate (event: UpdateEvent): Promise { + await afterEntityInsertOrUpdate(FrothyEntity, SUBGRAPH_ENTITIES, event, ENTITY_TO_LATEST_ENTITY_MAP); + } +} diff --git a/src/entity/SyncStatus.ts b/src/entity/SyncStatus.ts new file mode 100644 index 0000000..cc13c70 --- /dev/null +++ b/src/entity/SyncStatus.ts @@ -0,0 +1,45 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; +import { SyncStatusInterface } from '@cerc-io/util'; + +@Entity() +export class SyncStatus implements SyncStatusInterface { + @PrimaryGeneratedColumn() + id!: number; + + @Column('varchar', { length: 66 }) + chainHeadBlockHash!: string; + + @Column('integer') + chainHeadBlockNumber!: number; + + @Column('varchar', { length: 66 }) + latestIndexedBlockHash!: string; + + @Column('integer') + latestIndexedBlockNumber!: number; + + @Column('varchar', { length: 66 }) + latestProcessedBlockHash!: string; + + @Column('integer') + latestProcessedBlockNumber!: number; + + @Column('varchar', { length: 66 }) + latestCanonicalBlockHash!: string; + + @Column('integer') + latestCanonicalBlockNumber!: number; + + @Column('varchar', { length: 66 }) + initialIndexedBlockHash!: string; + + @Column('integer') + initialIndexedBlockNumber!: number; + + @Column('boolean', { default: false }) + hasIndexingError!: boolean; +} diff --git a/src/entity/Vault.ts b/src/entity/Vault.ts new file mode 100644 index 0000000..54146be --- /dev/null +++ b/src/entity/Vault.ts @@ -0,0 +1,158 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class Vault { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + deployer!: string; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('numeric', { transformer: decimalTransformer }) + totalAmount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalAmount1!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + createdAt!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + lastSnapshot!: bigint; + + @Column('varchar') + pool!: string; + + @Column('numeric', { transformer: bigintTransformer }) + state!: bigint; + + @Column('varchar') + strategyToken!: string; + + @Column('numeric', { transformer: decimalTransformer }) + annualPercentageYield!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + annualPercentageDailyYield!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + annualPercentageMonthlyYield!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + annualPercentageYearlyYield!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + lastTotalT0ValuePerLPT!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + accruedStrategistFees0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + accruedStrategistFees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('varchar') + beaconName!: string; + + @Column('numeric', { transformer: bigintTransformer }) + gasUsed!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + gasDeposited!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalLPTokensIssued!: bigint; + + @Column('varchar') + token1Symbol!: string; + + @Column('numeric', { transformer: bigintTransformer }) + decimals!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + feeTier!: bigint; + + @Column('varchar') + name!: string; + + @Column('varchar') + symbol!: string; + + @Column('numeric', { transformer: bigintTransformer }) + token0Balance!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + token0Decimals!: bigint; + + @Column('varchar') + token0Name!: string; + + @Column('varchar') + token0Symbol!: string; + + @Column('numeric', { transformer: bigintTransformer }) + token1Balance!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + token1Decimals!: bigint; + + @Column('varchar') + token1Name!: string; + + @Column('varchar') + payloadIpfs!: string; + + @Column('varchar') + vaultManager!: string; + + @Column('numeric', { transformer: decimalTransformer }) + averageFeeArrPerSecond!: Decimal; + + @Column('numeric', { transformer: bigintTransformer }) + totalSnapshots!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + annualFeeARR!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + dailyFeeAPR!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + weeklyFeeAPR!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedToken0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + totalValueLockedToken1!: Decimal; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultBeacon.ts b/src/entity/VaultBeacon.ts new file mode 100644 index 0000000..5782e10 --- /dev/null +++ b/src/entity/VaultBeacon.ts @@ -0,0 +1,43 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultBeacon { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + address!: string; + + @Column('varchar') + ipfsHash!: string; + + @Column('varchar') + name!: string; + + @Column('varchar') + status!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + updateTimestamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultDeposit.ts b/src/entity/VaultDeposit.ts new file mode 100644 index 0000000..4c2399b --- /dev/null +++ b/src/entity/VaultDeposit.ts @@ -0,0 +1,62 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class VaultDeposit { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + vault!: string; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('varchar') + sender!: string; + + @Column('varchar') + transactionHash!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + shares!: bigint; + + @Column('varchar') + executor!: string; + + @Column('varchar') + depositCaller!: string; + + @Column('numeric', { transformer: bigintTransformer }) + _blockNumber!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultGasDeposited.ts b/src/entity/VaultGasDeposited.ts new file mode 100644 index 0000000..889f82c --- /dev/null +++ b/src/entity/VaultGasDeposited.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultGasDeposited { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vault!: string; + + @Column('varchar') + origin!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultGasUsed.ts b/src/entity/VaultGasUsed.ts new file mode 100644 index 0000000..96f08b7 --- /dev/null +++ b/src/entity/VaultGasUsed.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultGasUsed { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vault!: string; + + @Column('varchar', { nullable: true }) + actionHash!: string | null; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultGasWithdrawn.ts b/src/entity/VaultGasWithdrawn.ts new file mode 100644 index 0000000..56ac015 --- /dev/null +++ b/src/entity/VaultGasWithdrawn.ts @@ -0,0 +1,37 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultGasWithdrawn { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vault!: string; + + @Column('varchar') + to!: string; + + @Column('numeric', { transformer: bigintTransformer }) + amount!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultPosition.ts b/src/entity/VaultPosition.ts new file mode 100644 index 0000000..0764a1d --- /dev/null +++ b/src/entity/VaultPosition.ts @@ -0,0 +1,40 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintArrayTransformer, bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultPosition { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { array: true, transformer: bigintArrayTransformer }) + upperTick!: bigint[]; + + @Column('numeric', { array: true, transformer: bigintArrayTransformer }) + lowerTick!: bigint[]; + + @Column('varchar') + vault!: string; + + @Column('numeric', { array: true, transformer: bigintArrayTransformer }) + relativeWeight!: bigint[]; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultSnapshot.ts b/src/entity/VaultSnapshot.ts new file mode 100644 index 0000000..cd82257 --- /dev/null +++ b/src/entity/VaultSnapshot.ts @@ -0,0 +1,62 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class VaultSnapshot { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + vaultAddress!: string; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount0!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalAmount1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + sqrtPriceX96!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + totalSupply!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees1!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + fees0!: bigint; + + @Column('numeric', { transformer: decimalTransformer }) + annualFeeAPR!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + dailyFeeAPR!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + weeklyFeeAPR!: Decimal; + + @Column('varchar') + transactionHash!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultStateChanged.ts b/src/entity/VaultStateChanged.ts new file mode 100644 index 0000000..be18eb5 --- /dev/null +++ b/src/entity/VaultStateChanged.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultStateChanged { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('varchar') + vault!: string; + + @Column('numeric', { transformer: bigintTransformer }) + status!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultTransfer.ts b/src/entity/VaultTransfer.ts new file mode 100644 index 0000000..fb505f7 --- /dev/null +++ b/src/entity/VaultTransfer.ts @@ -0,0 +1,40 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class VaultTransfer { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + from!: string; + + @Column('varchar') + to!: string; + + @Column('numeric', { transformer: bigintTransformer }) + value!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + _blockNumber!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/VaultWithdraw.ts b/src/entity/VaultWithdraw.ts new file mode 100644 index 0000000..1fb3848 --- /dev/null +++ b/src/entity/VaultWithdraw.ts @@ -0,0 +1,56 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { decimalTransformer, bigintTransformer } from '@cerc-io/util'; +import { Decimal } from 'decimal.js'; + +@Entity() +@Index(['blockNumber']) +export class VaultWithdraw { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + vault!: string; + + @Column('numeric', { transformer: decimalTransformer }) + amount0!: Decimal; + + @Column('numeric', { transformer: decimalTransformer }) + amount1!: Decimal; + + @Column('varchar') + token0!: string; + + @Column('varchar') + token1!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timeStamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + shares!: bigint; + + @Column('varchar') + sender!: string; + + @Column('varchar') + transactionHash!: string; + + @Column('numeric', { transformer: bigintTransformer }) + _blockNumber!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/Vote.ts b/src/entity/Vote.ts new file mode 100644 index 0000000..b2afa3e --- /dev/null +++ b/src/entity/Vote.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class Vote { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('varchar') + by!: string; + + @Column('varchar') + action!: string; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/WhiteListManager.ts b/src/entity/WhiteListManager.ts new file mode 100644 index 0000000..5119c62 --- /dev/null +++ b/src/entity/WhiteListManager.ts @@ -0,0 +1,34 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class WhiteListManager { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + address!: string; + + @Column('varchar') + vault!: string; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/entity/WhiteListVaultPermission.ts b/src/entity/WhiteListVaultPermission.ts new file mode 100644 index 0000000..dbbb934 --- /dev/null +++ b/src/entity/WhiteListVaultPermission.ts @@ -0,0 +1,40 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import { Entity, PrimaryColumn, Column, Index } from 'typeorm'; +import { bigintTransformer } from '@cerc-io/util'; + +@Entity() +@Index(['blockNumber']) +export class WhiteListVaultPermission { + @PrimaryColumn('varchar') + id!: string; + + @PrimaryColumn('varchar', { length: 66 }) + blockHash!: string; + + @Column('integer') + blockNumber!: number; + + @Column('varchar') + manager!: string; + + @Column('varchar') + vault!: string; + + @Column('varchar', { array: true }) + addresses!: string[]; + + @Column('numeric', { transformer: bigintTransformer }) + timestamp!: bigint; + + @Column('numeric', { transformer: bigintTransformer }) + updatedTimestamp!: bigint; + + @Column('boolean', { default: false }) + isPruned!: boolean; + + @Column('boolean', { default: false }) + isRemoved!: boolean; +} diff --git a/src/fill.ts b/src/fill.ts new file mode 100644 index 0000000..210341e --- /dev/null +++ b/src/fill.ts @@ -0,0 +1,48 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import 'reflect-metadata'; +import debug from 'debug'; + +import { FillCmd } from '@cerc-io/cli'; +import { getContractEntitiesMap } from '@cerc-io/util'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from './database'; +import { Indexer } from './indexer'; + +const log = debug('vulcanize:fill'); + +export const main = async (): Promise => { + const fillCmd = new FillCmd(); + await fillCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + fillCmd.config.server, + fillCmd.clients.ethClient, + fillCmd.ethProvider, + fillCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await fillCmd.initIndexer(Indexer, graphWatcher); + + // Get contractEntitiesMap required for fill-state + // NOTE: Assuming each entity type is only mapped to a single contract + const contractEntitiesMap = getContractEntitiesMap(graphWatcher.dataSources); + + await fillCmd.exec(contractEntitiesMap); +}; + +main().catch(err => { + log(err); +}).finally(() => { + process.exit(); +}); + +process.on('SIGINT', () => { + log(`Exiting process ${process.pid} with code 0`); + process.exit(0); +}); diff --git a/src/gql/index.ts b/src/gql/index.ts new file mode 100644 index 0000000..4732f68 --- /dev/null +++ b/src/gql/index.ts @@ -0,0 +1,3 @@ +export * as mutations from './mutations'; +export * as queries from './queries'; +export * as subscriptions from './subscriptions'; diff --git a/src/gql/mutations/index.ts b/src/gql/mutations/index.ts new file mode 100644 index 0000000..0c3bd85 --- /dev/null +++ b/src/gql/mutations/index.ts @@ -0,0 +1,4 @@ +import fs from 'fs'; +import path from 'path'; + +export const watchContract = fs.readFileSync(path.join(__dirname, 'watchContract.gql'), 'utf8'); diff --git a/src/gql/mutations/watchContract.gql b/src/gql/mutations/watchContract.gql new file mode 100644 index 0000000..2ecc74f --- /dev/null +++ b/src/gql/mutations/watchContract.gql @@ -0,0 +1,3 @@ +mutation watchContract($address: String!, $kind: String!, $checkpoint: Boolean!, $startingBlock: Int){ + watchContract(address: $address, kind: $kind, checkpoint: $checkpoint, startingBlock: $startingBlock) +} \ No newline at end of file diff --git a/src/gql/queries/_meta.gql b/src/gql/queries/_meta.gql new file mode 100644 index 0000000..d686e04 --- /dev/null +++ b/src/gql/queries/_meta.gql @@ -0,0 +1,11 @@ +query _meta($block: Block_height){ + _meta(block: $block){ + block{ + hash + number + timestamp + } + deployment + hasIndexingErrors + } +} \ No newline at end of file diff --git a/src/gql/queries/actionFailure.gql b/src/gql/queries/actionFailure.gql new file mode 100644 index 0000000..b983d9a --- /dev/null +++ b/src/gql/queries/actionFailure.gql @@ -0,0 +1,19 @@ +query actionFailure($id: ID!, $block: Block_height){ + actionFailure(id: $id, block: $block){ + id + timeStamp + method + action{ + id + timestamp + lastUpdated + state + status + recipients + vault + transactionHash + hash + gasUsed + } + } +} \ No newline at end of file diff --git a/src/gql/queries/actionFailures.gql b/src/gql/queries/actionFailures.gql new file mode 100644 index 0000000..01ca352 --- /dev/null +++ b/src/gql/queries/actionFailures.gql @@ -0,0 +1,19 @@ +query actionFailures($block: Block_height, $where: ActionFailure_filter, $orderBy: ActionFailure_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + actionFailures(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + method + action{ + id + timestamp + lastUpdated + state + status + recipients + vault + transactionHash + hash + gasUsed + } + } +} \ No newline at end of file diff --git a/src/gql/queries/bundle.gql b/src/gql/queries/bundle.gql new file mode 100644 index 0000000..d82ab8e --- /dev/null +++ b/src/gql/queries/bundle.gql @@ -0,0 +1,14 @@ +query bundle($id: ID!, $block: Block_height){ + bundle(id: $id, block: $block){ + id + createdAt + bundle + creator + host + source + output + active + infoHash + hash + } +} \ No newline at end of file diff --git a/src/gql/queries/bundles.gql b/src/gql/queries/bundles.gql new file mode 100644 index 0000000..2d44c84 --- /dev/null +++ b/src/gql/queries/bundles.gql @@ -0,0 +1,14 @@ +query bundles($block: Block_height, $where: Bundle_filter, $orderBy: Bundle_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + bundles(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + createdAt + bundle + creator + host + source + output + active + infoHash + hash + } +} \ No newline at end of file diff --git a/src/gql/queries/creator.gql b/src/gql/queries/creator.gql new file mode 100644 index 0000000..3922561 --- /dev/null +++ b/src/gql/queries/creator.gql @@ -0,0 +1,20 @@ +query creator($where: Strategy_filter, $orderBy: Strategy_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: CreatorWithdrawal_filter, $orderBy1: CreatorWithdrawal_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $id: ID!, $block: Block_height){ + creator(id: $id, block: $block){ + id + strategies(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + name + createdAt + admin + executionBundle + } + revenue + withdrawals(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeStamp + amount + } + totalValueLocked + totalYield + } +} \ No newline at end of file diff --git a/src/gql/queries/creatorWithdrawal.gql b/src/gql/queries/creatorWithdrawal.gql new file mode 100644 index 0000000..90c1d9a --- /dev/null +++ b/src/gql/queries/creatorWithdrawal.gql @@ -0,0 +1,13 @@ +query creatorWithdrawal($id: ID!, $block: Block_height){ + creatorWithdrawal(id: $id, block: $block){ + id + timeStamp + creator{ + id + revenue + totalValueLocked + totalYield + } + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/creatorWithdrawals.gql b/src/gql/queries/creatorWithdrawals.gql new file mode 100644 index 0000000..a37ac62 --- /dev/null +++ b/src/gql/queries/creatorWithdrawals.gql @@ -0,0 +1,13 @@ +query creatorWithdrawals($block: Block_height, $where: CreatorWithdrawal_filter, $orderBy: CreatorWithdrawal_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + creatorWithdrawals(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + creator{ + id + revenue + totalValueLocked + totalYield + } + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/creators.gql b/src/gql/queries/creators.gql new file mode 100644 index 0000000..498fbc3 --- /dev/null +++ b/src/gql/queries/creators.gql @@ -0,0 +1,20 @@ +query creators($where: Strategy_filter, $orderBy: Strategy_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: CreatorWithdrawal_filter, $orderBy1: CreatorWithdrawal_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $block: Block_height, $where2: Creator_filter, $orderBy2: Creator_orderBy, $orderDirection2: OrderDirection, $first2: Int, $skip2: Int){ + creators(block: $block, where: $where2, orderBy: $orderBy2, orderDirection: $orderDirection2, first: $first2, skip: $skip2){ + id + strategies(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + name + createdAt + admin + executionBundle + } + revenue + withdrawals(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeStamp + amount + } + totalValueLocked + totalYield + } +} \ No newline at end of file diff --git a/src/gql/queries/depositor.gql b/src/gql/queries/depositor.gql new file mode 100644 index 0000000..8dbc710 --- /dev/null +++ b/src/gql/queries/depositor.gql @@ -0,0 +1,63 @@ +query depositor($id: ID!, $block: Block_height){ + depositor(id: $id, block: $block){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + account + executor + depositCaller + depositedAmount0 + depositedAmount1 + withdrawnAmount0 + withdrawnAmount1 + liquidityAmount0 + liquidityAmount1 + createdTimestamp + updatedTimestamp + shares + } +} \ No newline at end of file diff --git a/src/gql/queries/depositors.gql b/src/gql/queries/depositors.gql new file mode 100644 index 0000000..fb4dba4 --- /dev/null +++ b/src/gql/queries/depositors.gql @@ -0,0 +1,63 @@ +query depositors($block: Block_height, $where: Depositor_filter, $orderBy: Depositor_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + depositors(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + account + executor + depositCaller + depositedAmount0 + depositedAmount1 + withdrawnAmount0 + withdrawnAmount1 + liquidityAmount0 + liquidityAmount1 + createdTimestamp + updatedTimestamp + shares + } +} \ No newline at end of file diff --git a/src/gql/queries/events.gql b/src/gql/queries/events.gql new file mode 100644 index 0000000..cdbba97 --- /dev/null +++ b/src/gql/queries/events.gql @@ -0,0 +1,208 @@ +query events($blockHash: String!, $contractAddress: String!, $name: String){ + events(blockHash: $blockHash, contractAddress: $contractAddress, name: $name){ + block{ + cid + hash + number + timestamp + parentHash + } + tx{ + hash + index + from + to + } + contract + eventIndex + event{ + ... on AdminChangedEvent { + previousAdmin + newAdmin + } + ... on UpgradedEvent { + implementation + } + ... on BeaconUpgradedEvent { + beacon + } + ... on LeaveQueuedEvent { + keeper + leaveTimestamp + } + ... on OwnershipTransferredEvent { + previousOwner + newOwner + } + ... on PermissionChangedEvent { + _subject + _permissionType + } + ... on ActionExecutedEvent { + actionHash + from + rewardPerAction + } + ... on ActionFailedEvent { + actionHash + } + ... on VoteEvent { + actionHash + from + approved + } + ... on ApprovalEvent { + owner + approved + tokenId + spender + value + } + ... on ApprovalForAllEvent { + owner + operator + approved + } + ... on PausedEvent { + account + } + ... on RoleAdminChangedEvent { + role + previousAdminRole + newAdminRole + } + ... on RoleGrantedEvent { + role + account + sender + } + ... on RoleRevokedEvent { + role + account + sender + } + ... on StrategyCreatedEvent { + owner + tokenId + name + } + ... on TransferEvent { + from + to + tokenId + value + } + ... on UnpausedEvent { + account + } + ... on BeaconConfigUpdatedEvent { + _name + _ipfsHash + } + ... on BeaconDeregisteredEvent { + _name + } + ... on BeaconRegisteredEvent { + _name + _address + _ipfsHash + } + ... on VaultCreatedEvent { + deployer + vault + beaconName + tokenId + vaultManager + } + ... on VaultStateChangedEvent { + vault + newState + } + ... on BundleRegisteredEvent { + hash + bundle + host + source + output + infoHash + active + creator + } + ... on BundleStateChangeEvent { + hash + toggle + } + ... on DepositedEvent { + origin + target + amount + } + ... on EtherUsedEvent { + account + amount + jobHash + } + ... on WithdrawnEvent { + targetAddress + to + amount + } + ... on ManagerAddedEvent { + vaultAddress + manager + } + ... on PermissionsAddedEvent { + whitelistManager + vault + addressesAdded + } + ... on PermissionsRemovedEvent { + whitelistManager + vault + addressesRemoved + } + ... on DepositEvent { + sender + to + shares + amount0 + amount1 + } + ... on FeesEarnedEvent { + amount0Earned + amount1Earned + } + ... on SnapshotEvent { + sqrtPriceX96 + totalAmount0 + totalAmount1 + totalSupply + } + ... on WithdrawEvent { + sender + to + shares + amount0 + amount1 + } + ... on JobExecutedEvent { + jobHash + executor + } + ... on JobRegisteredEvent { + jobInfo + targetAddresses + jobHash + name + ipfsForJobDetails + } + ... on JobToggledByCreatorEvent { + jobHash + toggle + } + } + proof{ + data + } + } +} \ No newline at end of file diff --git a/src/gql/queries/eventsInRange.gql b/src/gql/queries/eventsInRange.gql new file mode 100644 index 0000000..bbc4c40 --- /dev/null +++ b/src/gql/queries/eventsInRange.gql @@ -0,0 +1,208 @@ +query eventsInRange($fromBlockNumber: Int!, $toBlockNumber: Int!){ + eventsInRange(fromBlockNumber: $fromBlockNumber, toBlockNumber: $toBlockNumber){ + block{ + cid + hash + number + timestamp + parentHash + } + tx{ + hash + index + from + to + } + contract + eventIndex + event{ + ... on AdminChangedEvent { + previousAdmin + newAdmin + } + ... on UpgradedEvent { + implementation + } + ... on BeaconUpgradedEvent { + beacon + } + ... on LeaveQueuedEvent { + keeper + leaveTimestamp + } + ... on OwnershipTransferredEvent { + previousOwner + newOwner + } + ... on PermissionChangedEvent { + _subject + _permissionType + } + ... on ActionExecutedEvent { + actionHash + from + rewardPerAction + } + ... on ActionFailedEvent { + actionHash + } + ... on VoteEvent { + actionHash + from + approved + } + ... on ApprovalEvent { + owner + approved + tokenId + spender + value + } + ... on ApprovalForAllEvent { + owner + operator + approved + } + ... on PausedEvent { + account + } + ... on RoleAdminChangedEvent { + role + previousAdminRole + newAdminRole + } + ... on RoleGrantedEvent { + role + account + sender + } + ... on RoleRevokedEvent { + role + account + sender + } + ... on StrategyCreatedEvent { + owner + tokenId + name + } + ... on TransferEvent { + from + to + tokenId + value + } + ... on UnpausedEvent { + account + } + ... on BeaconConfigUpdatedEvent { + _name + _ipfsHash + } + ... on BeaconDeregisteredEvent { + _name + } + ... on BeaconRegisteredEvent { + _name + _address + _ipfsHash + } + ... on VaultCreatedEvent { + deployer + vault + beaconName + tokenId + vaultManager + } + ... on VaultStateChangedEvent { + vault + newState + } + ... on BundleRegisteredEvent { + hash + bundle + host + source + output + infoHash + active + creator + } + ... on BundleStateChangeEvent { + hash + toggle + } + ... on DepositedEvent { + origin + target + amount + } + ... on EtherUsedEvent { + account + amount + jobHash + } + ... on WithdrawnEvent { + targetAddress + to + amount + } + ... on ManagerAddedEvent { + vaultAddress + manager + } + ... on PermissionsAddedEvent { + whitelistManager + vault + addressesAdded + } + ... on PermissionsRemovedEvent { + whitelistManager + vault + addressesRemoved + } + ... on DepositEvent { + sender + to + shares + amount0 + amount1 + } + ... on FeesEarnedEvent { + amount0Earned + amount1Earned + } + ... on SnapshotEvent { + sqrtPriceX96 + totalAmount0 + totalAmount1 + totalSupply + } + ... on WithdrawEvent { + sender + to + shares + amount0 + amount1 + } + ... on JobExecutedEvent { + jobHash + executor + } + ... on JobRegisteredEvent { + jobInfo + targetAddresses + jobHash + name + ipfsForJobDetails + } + ... on JobToggledByCreatorEvent { + jobHash + toggle + } + } + proof{ + data + } + } +} \ No newline at end of file diff --git a/src/gql/queries/getState.gql b/src/gql/queries/getState.gql new file mode 100644 index 0000000..3b8f605 --- /dev/null +++ b/src/gql/queries/getState.gql @@ -0,0 +1,15 @@ +query getState($blockHash: String!, $contractAddress: String!, $kind: String){ + getState(blockHash: $blockHash, contractAddress: $contractAddress, kind: $kind){ + block{ + cid + hash + number + timestamp + parentHash + } + contractAddress + cid + kind + data + } +} \ No newline at end of file diff --git a/src/gql/queries/getStateByCID.gql b/src/gql/queries/getStateByCID.gql new file mode 100644 index 0000000..6c3c4fd --- /dev/null +++ b/src/gql/queries/getStateByCID.gql @@ -0,0 +1,15 @@ +query getStateByCID($cid: String!){ + getStateByCID(cid: $cid){ + block{ + cid + hash + number + timestamp + parentHash + } + contractAddress + cid + kind + data + } +} \ No newline at end of file diff --git a/src/gql/queries/getSyncStatus.gql b/src/gql/queries/getSyncStatus.gql new file mode 100644 index 0000000..48175b4 --- /dev/null +++ b/src/gql/queries/getSyncStatus.gql @@ -0,0 +1,12 @@ +query getSyncStatus{ + getSyncStatus{ + latestIndexedBlockHash + latestIndexedBlockNumber + latestCanonicalBlockHash + latestCanonicalBlockNumber + initialIndexedBlockHash + initialIndexedBlockNumber + latestProcessedBlockHash + latestProcessedBlockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/index.ts b/src/gql/queries/index.ts new file mode 100644 index 0000000..d7fa9f9 --- /dev/null +++ b/src/gql/queries/index.ts @@ -0,0 +1,87 @@ +import fs from 'fs'; +import path from 'path'; + +export const events = fs.readFileSync(path.join(__dirname, 'events.gql'), 'utf8'); +export const eventsInRange = fs.readFileSync(path.join(__dirname, 'eventsInRange.gql'), 'utf8'); +export const keeper = fs.readFileSync(path.join(__dirname, 'keeper.gql'), 'utf8'); +export const keepers = fs.readFileSync(path.join(__dirname, 'keepers.gql'), 'utf8'); +export const runner = fs.readFileSync(path.join(__dirname, 'runner.gql'), 'utf8'); +export const runners = fs.readFileSync(path.join(__dirname, 'runners.gql'), 'utf8'); +export const queueTimeline = fs.readFileSync(path.join(__dirname, 'queueTimeline.gql'), 'utf8'); +export const queueTimelines = fs.readFileSync(path.join(__dirname, 'queueTimelines.gql'), 'utf8'); +export const permissionUpdate = fs.readFileSync(path.join(__dirname, 'permissionUpdate.gql'), 'utf8'); +export const permissionUpdates = fs.readFileSync(path.join(__dirname, 'permissionUpdates.gql'), 'utf8'); +export const orchestratorAction = fs.readFileSync(path.join(__dirname, 'orchestratorAction.gql'), 'utf8'); +export const orchestratorActions = fs.readFileSync(path.join(__dirname, 'orchestratorActions.gql'), 'utf8'); +export const vote = fs.readFileSync(path.join(__dirname, 'vote.gql'), 'utf8'); +export const votes = fs.readFileSync(path.join(__dirname, 'votes.gql'), 'utf8'); +export const actionFailure = fs.readFileSync(path.join(__dirname, 'actionFailure.gql'), 'utf8'); +export const actionFailures = fs.readFileSync(path.join(__dirname, 'actionFailures.gql'), 'utf8'); +export const creator = fs.readFileSync(path.join(__dirname, 'creator.gql'), 'utf8'); +export const creators = fs.readFileSync(path.join(__dirname, 'creators.gql'), 'utf8'); +export const creatorWithdrawal = fs.readFileSync(path.join(__dirname, 'creatorWithdrawal.gql'), 'utf8'); +export const creatorWithdrawals = fs.readFileSync(path.join(__dirname, 'creatorWithdrawals.gql'), 'utf8'); +export const strategy = fs.readFileSync(path.join(__dirname, 'strategy.gql'), 'utf8'); +export const strategies = fs.readFileSync(path.join(__dirname, 'strategies.gql'), 'utf8'); +export const vault = fs.readFileSync(path.join(__dirname, 'vault.gql'), 'utf8'); +export const vaults = fs.readFileSync(path.join(__dirname, 'vaults.gql'), 'utf8'); +export const vaultSnapshot = fs.readFileSync(path.join(__dirname, 'vaultSnapshot.gql'), 'utf8'); +export const vaultSnapshots = fs.readFileSync(path.join(__dirname, 'vaultSnapshots.gql'), 'utf8'); +export const prevVaultSnapshot = fs.readFileSync(path.join(__dirname, 'prevVaultSnapshot.gql'), 'utf8'); +export const prevVaultSnapshots = fs.readFileSync(path.join(__dirname, 'prevVaultSnapshots.gql'), 'utf8'); +export const prevDailyVaultSnapshot = fs.readFileSync(path.join(__dirname, 'prevDailyVaultSnapshot.gql'), 'utf8'); +export const prevDailyVaultSnapshots = fs.readFileSync(path.join(__dirname, 'prevDailyVaultSnapshots.gql'), 'utf8'); +export const prevMonthlyVaultSnapshot = fs.readFileSync(path.join(__dirname, 'prevMonthlyVaultSnapshot.gql'), 'utf8'); +export const prevMonthlyVaultSnapshots = fs.readFileSync(path.join(__dirname, 'prevMonthlyVaultSnapshots.gql'), 'utf8'); +export const prevAnnualVaultSnapshot = fs.readFileSync(path.join(__dirname, 'prevAnnualVaultSnapshot.gql'), 'utf8'); +export const prevAnnualVaultSnapshots = fs.readFileSync(path.join(__dirname, 'prevAnnualVaultSnapshots.gql'), 'utf8'); +export const prevWeeklyVaultSnapshot = fs.readFileSync(path.join(__dirname, 'prevWeeklyVaultSnapshot.gql'), 'utf8'); +export const prevWeeklyVaultSnapshots = fs.readFileSync(path.join(__dirname, 'prevWeeklyVaultSnapshots.gql'), 'utf8'); +export const vaultStateChanged = fs.readFileSync(path.join(__dirname, 'vaultStateChanged.gql'), 'utf8'); +export const vaultStateChangeds = fs.readFileSync(path.join(__dirname, 'vaultStateChangeds.gql'), 'utf8'); +export const vaultDeposit = fs.readFileSync(path.join(__dirname, 'vaultDeposit.gql'), 'utf8'); +export const vaultDeposits = fs.readFileSync(path.join(__dirname, 'vaultDeposits.gql'), 'utf8'); +export const vaultWithdraw = fs.readFileSync(path.join(__dirname, 'vaultWithdraw.gql'), 'utf8'); +export const vaultWithdraws = fs.readFileSync(path.join(__dirname, 'vaultWithdraws.gql'), 'utf8'); +export const depositor = fs.readFileSync(path.join(__dirname, 'depositor.gql'), 'utf8'); +export const depositors = fs.readFileSync(path.join(__dirname, 'depositors.gql'), 'utf8'); +export const vaultBeacon = fs.readFileSync(path.join(__dirname, 'vaultBeacon.gql'), 'utf8'); +export const vaultBeacons = fs.readFileSync(path.join(__dirname, 'vaultBeacons.gql'), 'utf8'); +export const vaultPosition = fs.readFileSync(path.join(__dirname, 'vaultPosition.gql'), 'utf8'); +export const vaultPositions = fs.readFileSync(path.join(__dirname, 'vaultPositions.gql'), 'utf8'); +export const liquiditySteer = fs.readFileSync(path.join(__dirname, 'liquiditySteer.gql'), 'utf8'); +export const liquiditySteers = fs.readFileSync(path.join(__dirname, 'liquiditySteers.gql'), 'utf8'); +export const orchestratorReward = fs.readFileSync(path.join(__dirname, 'orchestratorReward.gql'), 'utf8'); +export const orchestratorRewards = fs.readFileSync(path.join(__dirname, 'orchestratorRewards.gql'), 'utf8'); +export const orchestratorRewardTracker = fs.readFileSync(path.join(__dirname, 'orchestratorRewardTracker.gql'), 'utf8'); +export const orchestratorRewardTrackers = fs.readFileSync(path.join(__dirname, 'orchestratorRewardTrackers.gql'), 'utf8'); +export const orchestratorRewardSnapshot = fs.readFileSync(path.join(__dirname, 'orchestratorRewardSnapshot.gql'), 'utf8'); +export const orchestratorRewardSnapshots = fs.readFileSync(path.join(__dirname, 'orchestratorRewardSnapshots.gql'), 'utf8'); +export const bundle = fs.readFileSync(path.join(__dirname, 'bundle.gql'), 'utf8'); +export const bundles = fs.readFileSync(path.join(__dirname, 'bundles.gql'), 'utf8'); +export const job = fs.readFileSync(path.join(__dirname, 'job.gql'), 'utf8'); +export const jobs = fs.readFileSync(path.join(__dirname, 'jobs.gql'), 'utf8'); +export const jobExecution = fs.readFileSync(path.join(__dirname, 'jobExecution.gql'), 'utf8'); +export const jobExecutions = fs.readFileSync(path.join(__dirname, 'jobExecutions.gql'), 'utf8'); +export const jobGasDeposited = fs.readFileSync(path.join(__dirname, 'jobGasDeposited.gql'), 'utf8'); +export const jobGasDepositeds = fs.readFileSync(path.join(__dirname, 'jobGasDepositeds.gql'), 'utf8'); +export const jobGasWithdrawn = fs.readFileSync(path.join(__dirname, 'jobGasWithdrawn.gql'), 'utf8'); +export const jobGasWithdrawns = fs.readFileSync(path.join(__dirname, 'jobGasWithdrawns.gql'), 'utf8'); +export const vaultGasUsed = fs.readFileSync(path.join(__dirname, 'vaultGasUsed.gql'), 'utf8'); +export const vaultGasUseds = fs.readFileSync(path.join(__dirname, 'vaultGasUseds.gql'), 'utf8'); +export const vaultGasDeposited = fs.readFileSync(path.join(__dirname, 'vaultGasDeposited.gql'), 'utf8'); +export const vaultGasDepositeds = fs.readFileSync(path.join(__dirname, 'vaultGasDepositeds.gql'), 'utf8'); +export const vaultGasWithdrawn = fs.readFileSync(path.join(__dirname, 'vaultGasWithdrawn.gql'), 'utf8'); +export const vaultGasWithdrawns = fs.readFileSync(path.join(__dirname, 'vaultGasWithdrawns.gql'), 'utf8'); +export const whiteListManager = fs.readFileSync(path.join(__dirname, 'whiteListManager.gql'), 'utf8'); +export const whiteListManagers = fs.readFileSync(path.join(__dirname, 'whiteListManagers.gql'), 'utf8'); +export const whiteListVaultPermission = fs.readFileSync(path.join(__dirname, 'whiteListVaultPermission.gql'), 'utf8'); +export const whiteListVaultPermissions = fs.readFileSync(path.join(__dirname, 'whiteListVaultPermissions.gql'), 'utf8'); +export const leaderBoard = fs.readFileSync(path.join(__dirname, 'leaderBoard.gql'), 'utf8'); +export const leaderBoards = fs.readFileSync(path.join(__dirname, 'leaderBoards.gql'), 'utf8'); +export const vaultTransfer = fs.readFileSync(path.join(__dirname, 'vaultTransfer.gql'), 'utf8'); +export const vaultTransfers = fs.readFileSync(path.join(__dirname, 'vaultTransfers.gql'), 'utf8'); +export const _meta = fs.readFileSync(path.join(__dirname, '_meta.gql'), 'utf8'); +export const getStateByCID = fs.readFileSync(path.join(__dirname, 'getStateByCID.gql'), 'utf8'); +export const getState = fs.readFileSync(path.join(__dirname, 'getState.gql'), 'utf8'); +export const getSyncStatus = fs.readFileSync(path.join(__dirname, 'getSyncStatus.gql'), 'utf8'); diff --git a/src/gql/queries/job.gql b/src/gql/queries/job.gql new file mode 100644 index 0000000..2345cc3 --- /dev/null +++ b/src/gql/queries/job.gql @@ -0,0 +1,68 @@ +query job($where: JobExecution_filter, $orderBy: JobExecution_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $id: ID!, $block: Block_height){ + job(id: $id, block: $block){ + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + executions(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + jobHash + executor + status + jobIdString + } + status + failedCounts + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + jobHash + gasUsed + } +} \ No newline at end of file diff --git a/src/gql/queries/jobExecution.gql b/src/gql/queries/jobExecution.gql new file mode 100644 index 0000000..4187609 --- /dev/null +++ b/src/gql/queries/jobExecution.gql @@ -0,0 +1,22 @@ +query jobExecution($id: ID!, $block: Block_height){ + jobExecution(id: $id, block: $block){ + id + timestamp + jobHash + executor + status + jobIdString + jobId{ + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + status + failedCounts + jobHash + gasUsed + } + } +} \ No newline at end of file diff --git a/src/gql/queries/jobExecutions.gql b/src/gql/queries/jobExecutions.gql new file mode 100644 index 0000000..d78eac1 --- /dev/null +++ b/src/gql/queries/jobExecutions.gql @@ -0,0 +1,22 @@ +query jobExecutions($block: Block_height, $where: JobExecution_filter, $orderBy: JobExecution_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + jobExecutions(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + jobHash + executor + status + jobIdString + jobId{ + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + status + failedCounts + jobHash + gasUsed + } + } +} \ No newline at end of file diff --git a/src/gql/queries/jobGasDeposited.gql b/src/gql/queries/jobGasDeposited.gql new file mode 100644 index 0000000..94b5725 --- /dev/null +++ b/src/gql/queries/jobGasDeposited.gql @@ -0,0 +1,8 @@ +query jobGasDeposited($id: ID!, $block: Block_height){ + jobGasDeposited(id: $id, block: $block){ + id + timestamp + creator + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/jobGasDepositeds.gql b/src/gql/queries/jobGasDepositeds.gql new file mode 100644 index 0000000..a31dd93 --- /dev/null +++ b/src/gql/queries/jobGasDepositeds.gql @@ -0,0 +1,8 @@ +query jobGasDepositeds($block: Block_height, $where: JobGasDeposited_filter, $orderBy: JobGasDeposited_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + jobGasDepositeds(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + creator + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/jobGasWithdrawn.gql b/src/gql/queries/jobGasWithdrawn.gql new file mode 100644 index 0000000..029dcc4 --- /dev/null +++ b/src/gql/queries/jobGasWithdrawn.gql @@ -0,0 +1,8 @@ +query jobGasWithdrawn($id: ID!, $block: Block_height){ + jobGasWithdrawn(id: $id, block: $block){ + id + timestamp + creator + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/jobGasWithdrawns.gql b/src/gql/queries/jobGasWithdrawns.gql new file mode 100644 index 0000000..b18b6af --- /dev/null +++ b/src/gql/queries/jobGasWithdrawns.gql @@ -0,0 +1,8 @@ +query jobGasWithdrawns($block: Block_height, $where: JobGasWithdrawn_filter, $orderBy: JobGasWithdrawn_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + jobGasWithdrawns(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + creator + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/jobs.gql b/src/gql/queries/jobs.gql new file mode 100644 index 0000000..1b9c9f2 --- /dev/null +++ b/src/gql/queries/jobs.gql @@ -0,0 +1,68 @@ +query jobs($where: JobExecution_filter, $orderBy: JobExecution_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $block: Block_height, $where1: Job_filter, $orderBy1: Job_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int){ + jobs(block: $block, where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + executions(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + jobHash + executor + status + jobIdString + } + status + failedCounts + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + jobHash + gasUsed + } +} \ No newline at end of file diff --git a/src/gql/queries/keeper.gql b/src/gql/queries/keeper.gql new file mode 100644 index 0000000..5ab0d5a --- /dev/null +++ b/src/gql/queries/keeper.gql @@ -0,0 +1,30 @@ +query keeper($where: OrchestratorAction_filter, $orderBy: OrchestratorAction_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: QueueTimeline_filter, $orderBy1: QueueTimeline_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $where2: PermissionUpdate_filter, $orderBy2: PermissionUpdate_orderBy, $orderDirection2: OrderDirection, $first2: Int, $skip2: Int, $id: ID!, $block: Block_height){ + keeper(id: $id, block: $block){ + id + bondHeld + index + actions(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + lastUpdated + state + status + recipients + vault + transactionHash + hash + gasUsed + } + status + queueTimeline(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeDelay + queued + } + permissionUpdates(where: $where2, orderBy: $orderBy2, orderDirection: $orderDirection2, first: $first2, skip: $skip2){ + id + timeStamp + action + } + } +} \ No newline at end of file diff --git a/src/gql/queries/keepers.gql b/src/gql/queries/keepers.gql new file mode 100644 index 0000000..2a9d45e --- /dev/null +++ b/src/gql/queries/keepers.gql @@ -0,0 +1,30 @@ +query keepers($where: OrchestratorAction_filter, $orderBy: OrchestratorAction_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: QueueTimeline_filter, $orderBy1: QueueTimeline_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $where2: PermissionUpdate_filter, $orderBy2: PermissionUpdate_orderBy, $orderDirection2: OrderDirection, $first2: Int, $skip2: Int, $block: Block_height, $where3: Keeper_filter, $orderBy3: Keeper_orderBy, $orderDirection3: OrderDirection, $first3: Int, $skip3: Int){ + keepers(block: $block, where: $where3, orderBy: $orderBy3, orderDirection: $orderDirection3, first: $first3, skip: $skip3){ + id + bondHeld + index + actions(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + lastUpdated + state + status + recipients + vault + transactionHash + hash + gasUsed + } + status + queueTimeline(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeDelay + queued + } + permissionUpdates(where: $where2, orderBy: $orderBy2, orderDirection: $orderDirection2, first: $first2, skip: $skip2){ + id + timeStamp + action + } + } +} \ No newline at end of file diff --git a/src/gql/queries/leaderBoard.gql b/src/gql/queries/leaderBoard.gql new file mode 100644 index 0000000..0978d38 --- /dev/null +++ b/src/gql/queries/leaderBoard.gql @@ -0,0 +1,9 @@ +query leaderBoard($id: ID!, $block: Block_height){ + leaderBoard(id: $id, block: $block){ + id + address + numStaticJobs + numApps + timestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/leaderBoards.gql b/src/gql/queries/leaderBoards.gql new file mode 100644 index 0000000..9eb1517 --- /dev/null +++ b/src/gql/queries/leaderBoards.gql @@ -0,0 +1,9 @@ +query leaderBoards($block: Block_height, $where: LeaderBoard_filter, $orderBy: LeaderBoard_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + leaderBoards(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + address + numStaticJobs + numApps + timestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/liquiditySteer.gql b/src/gql/queries/liquiditySteer.gql new file mode 100644 index 0000000..a3d8cc2 --- /dev/null +++ b/src/gql/queries/liquiditySteer.gql @@ -0,0 +1,53 @@ +query liquiditySteer($id: ID!, $block: Block_height){ + liquiditySteer(id: $id, block: $block){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + timeStamp + tick + } +} \ No newline at end of file diff --git a/src/gql/queries/liquiditySteers.gql b/src/gql/queries/liquiditySteers.gql new file mode 100644 index 0000000..04cd741 --- /dev/null +++ b/src/gql/queries/liquiditySteers.gql @@ -0,0 +1,53 @@ +query liquiditySteers($block: Block_height, $where: LiquiditySteer_filter, $orderBy: LiquiditySteer_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + liquiditySteers(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + timeStamp + tick + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorAction.gql b/src/gql/queries/orchestratorAction.gql new file mode 100644 index 0000000..4bbcb93 --- /dev/null +++ b/src/gql/queries/orchestratorAction.gql @@ -0,0 +1,29 @@ +query orchestratorAction($where: Vote_filter, $orderBy: Vote_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: ActionFailure_filter, $orderBy1: ActionFailure_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $id: ID!, $block: Block_height){ + orchestratorAction(id: $id, block: $block){ + id + timestamp + from{ + id + bondHeld + index + status + } + votes(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + } + lastUpdated + state + status + recipients + actionFailed(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeStamp + method + } + vault + transactionHash + hash + gasUsed + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorActions.gql b/src/gql/queries/orchestratorActions.gql new file mode 100644 index 0000000..968eb69 --- /dev/null +++ b/src/gql/queries/orchestratorActions.gql @@ -0,0 +1,29 @@ +query orchestratorActions($where: Vote_filter, $orderBy: Vote_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: ActionFailure_filter, $orderBy1: ActionFailure_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $block: Block_height, $where2: OrchestratorAction_filter, $orderBy2: OrchestratorAction_orderBy, $orderDirection2: OrderDirection, $first2: Int, $skip2: Int){ + orchestratorActions(block: $block, where: $where2, orderBy: $orderBy2, orderDirection: $orderDirection2, first: $first2, skip: $skip2){ + id + timestamp + from{ + id + bondHeld + index + status + } + votes(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + } + lastUpdated + state + status + recipients + actionFailed(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeStamp + method + } + vault + transactionHash + hash + gasUsed + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorReward.gql b/src/gql/queries/orchestratorReward.gql new file mode 100644 index 0000000..af764ae --- /dev/null +++ b/src/gql/queries/orchestratorReward.gql @@ -0,0 +1,13 @@ +query orchestratorReward($id: ID!, $block: Block_height){ + orchestratorReward(id: $id, block: $block){ + id + timeStamp + updatedTimeStamp + address + reward + trackerId{ + id + timeStamp + } + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorRewardSnapshot.gql b/src/gql/queries/orchestratorRewardSnapshot.gql new file mode 100644 index 0000000..be1d076 --- /dev/null +++ b/src/gql/queries/orchestratorRewardSnapshot.gql @@ -0,0 +1,9 @@ +query orchestratorRewardSnapshot($id: ID!, $block: Block_height){ + orchestratorRewardSnapshot(id: $id, block: $block){ + id + timeStamp + updatedTimeStamp + address + reward + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorRewardSnapshots.gql b/src/gql/queries/orchestratorRewardSnapshots.gql new file mode 100644 index 0000000..2a59d7b --- /dev/null +++ b/src/gql/queries/orchestratorRewardSnapshots.gql @@ -0,0 +1,9 @@ +query orchestratorRewardSnapshots($block: Block_height, $where: OrchestratorRewardSnapshot_filter, $orderBy: OrchestratorRewardSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + orchestratorRewardSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + updatedTimeStamp + address + reward + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorRewardTracker.gql b/src/gql/queries/orchestratorRewardTracker.gql new file mode 100644 index 0000000..a325b2c --- /dev/null +++ b/src/gql/queries/orchestratorRewardTracker.gql @@ -0,0 +1,13 @@ +query orchestratorRewardTracker($where: OrchestratorReward_filter, $orderBy: OrchestratorReward_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $id: ID!, $block: Block_height){ + orchestratorRewardTracker(id: $id, block: $block){ + id + timeStamp + rewards(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + updatedTimeStamp + address + reward + } + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorRewardTrackers.gql b/src/gql/queries/orchestratorRewardTrackers.gql new file mode 100644 index 0000000..cd9fbe9 --- /dev/null +++ b/src/gql/queries/orchestratorRewardTrackers.gql @@ -0,0 +1,13 @@ +query orchestratorRewardTrackers($where: OrchestratorReward_filter, $orderBy: OrchestratorReward_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $block: Block_height, $where1: OrchestratorRewardTracker_filter, $orderBy1: OrchestratorRewardTracker_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int){ + orchestratorRewardTrackers(block: $block, where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timeStamp + rewards(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + updatedTimeStamp + address + reward + } + } +} \ No newline at end of file diff --git a/src/gql/queries/orchestratorRewards.gql b/src/gql/queries/orchestratorRewards.gql new file mode 100644 index 0000000..e1033ff --- /dev/null +++ b/src/gql/queries/orchestratorRewards.gql @@ -0,0 +1,13 @@ +query orchestratorRewards($block: Block_height, $where: OrchestratorReward_filter, $orderBy: OrchestratorReward_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + orchestratorRewards(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + updatedTimeStamp + address + reward + trackerId{ + id + timeStamp + } + } +} \ No newline at end of file diff --git a/src/gql/queries/permissionUpdate.gql b/src/gql/queries/permissionUpdate.gql new file mode 100644 index 0000000..5a2d4b5 --- /dev/null +++ b/src/gql/queries/permissionUpdate.gql @@ -0,0 +1,13 @@ +query permissionUpdate($id: ID!, $block: Block_height){ + permissionUpdate(id: $id, block: $block){ + id + keeper{ + id + bondHeld + index + status + } + timeStamp + action + } +} \ No newline at end of file diff --git a/src/gql/queries/permissionUpdates.gql b/src/gql/queries/permissionUpdates.gql new file mode 100644 index 0000000..d08b54c --- /dev/null +++ b/src/gql/queries/permissionUpdates.gql @@ -0,0 +1,13 @@ +query permissionUpdates($block: Block_height, $where: PermissionUpdate_filter, $orderBy: PermissionUpdate_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + permissionUpdates(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + keeper{ + id + bondHeld + index + status + } + timeStamp + action + } +} \ No newline at end of file diff --git a/src/gql/queries/prevAnnualVaultSnapshot.gql b/src/gql/queries/prevAnnualVaultSnapshot.gql new file mode 100644 index 0000000..dd11ffa --- /dev/null +++ b/src/gql/queries/prevAnnualVaultSnapshot.gql @@ -0,0 +1,58 @@ +query prevAnnualVaultSnapshot($id: ID!, $block: Block_height){ + prevAnnualVaultSnapshot(id: $id, block: $block){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevAnnualVaultSnapshots.gql b/src/gql/queries/prevAnnualVaultSnapshots.gql new file mode 100644 index 0000000..2cea477 --- /dev/null +++ b/src/gql/queries/prevAnnualVaultSnapshots.gql @@ -0,0 +1,58 @@ +query prevAnnualVaultSnapshots($block: Block_height, $where: PrevAnnualVaultSnapshot_filter, $orderBy: PrevAnnualVaultSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + prevAnnualVaultSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevDailyVaultSnapshot.gql b/src/gql/queries/prevDailyVaultSnapshot.gql new file mode 100644 index 0000000..cffcb96 --- /dev/null +++ b/src/gql/queries/prevDailyVaultSnapshot.gql @@ -0,0 +1,58 @@ +query prevDailyVaultSnapshot($id: ID!, $block: Block_height){ + prevDailyVaultSnapshot(id: $id, block: $block){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevDailyVaultSnapshots.gql b/src/gql/queries/prevDailyVaultSnapshots.gql new file mode 100644 index 0000000..14eb387 --- /dev/null +++ b/src/gql/queries/prevDailyVaultSnapshots.gql @@ -0,0 +1,58 @@ +query prevDailyVaultSnapshots($block: Block_height, $where: PrevDailyVaultSnapshot_filter, $orderBy: PrevDailyVaultSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + prevDailyVaultSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevMonthlyVaultSnapshot.gql b/src/gql/queries/prevMonthlyVaultSnapshot.gql new file mode 100644 index 0000000..5ffd6ef --- /dev/null +++ b/src/gql/queries/prevMonthlyVaultSnapshot.gql @@ -0,0 +1,58 @@ +query prevMonthlyVaultSnapshot($id: ID!, $block: Block_height){ + prevMonthlyVaultSnapshot(id: $id, block: $block){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevMonthlyVaultSnapshots.gql b/src/gql/queries/prevMonthlyVaultSnapshots.gql new file mode 100644 index 0000000..a78e272 --- /dev/null +++ b/src/gql/queries/prevMonthlyVaultSnapshots.gql @@ -0,0 +1,58 @@ +query prevMonthlyVaultSnapshots($block: Block_height, $where: PrevMonthlyVaultSnapshot_filter, $orderBy: PrevMonthlyVaultSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + prevMonthlyVaultSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevVaultSnapshot.gql b/src/gql/queries/prevVaultSnapshot.gql new file mode 100644 index 0000000..066be2f --- /dev/null +++ b/src/gql/queries/prevVaultSnapshot.gql @@ -0,0 +1,58 @@ +query prevVaultSnapshot($id: ID!, $block: Block_height){ + prevVaultSnapshot(id: $id, block: $block){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevVaultSnapshots.gql b/src/gql/queries/prevVaultSnapshots.gql new file mode 100644 index 0000000..7935269 --- /dev/null +++ b/src/gql/queries/prevVaultSnapshots.gql @@ -0,0 +1,58 @@ +query prevVaultSnapshots($block: Block_height, $where: PrevVaultSnapshot_filter, $orderBy: PrevVaultSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + prevVaultSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + } +} \ No newline at end of file diff --git a/src/gql/queries/prevWeeklyVaultSnapshot.gql b/src/gql/queries/prevWeeklyVaultSnapshot.gql new file mode 100644 index 0000000..bd67fb1 --- /dev/null +++ b/src/gql/queries/prevWeeklyVaultSnapshot.gql @@ -0,0 +1,61 @@ +query prevWeeklyVaultSnapshot($id: ID!, $block: Block_height){ + prevWeeklyVaultSnapshot(id: $id, block: $block){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + averageFeeArrPerSecond + totalSnapshots + weeklyFeeApr + } +} \ No newline at end of file diff --git a/src/gql/queries/prevWeeklyVaultSnapshots.gql b/src/gql/queries/prevWeeklyVaultSnapshots.gql new file mode 100644 index 0000000..b88ec9d --- /dev/null +++ b/src/gql/queries/prevWeeklyVaultSnapshots.gql @@ -0,0 +1,61 @@ +query prevWeeklyVaultSnapshots($block: Block_height, $where: PrevWeeklyVaultSnapshot_filter, $orderBy: PrevWeeklyVaultSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + prevWeeklyVaultSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + averageFeeArrPerSecond + totalSnapshots + weeklyFeeApr + } +} \ No newline at end of file diff --git a/src/gql/queries/queueTimeline.gql b/src/gql/queries/queueTimeline.gql new file mode 100644 index 0000000..8bdd822 --- /dev/null +++ b/src/gql/queries/queueTimeline.gql @@ -0,0 +1,13 @@ +query queueTimeline($id: ID!, $block: Block_height){ + queueTimeline(id: $id, block: $block){ + id + keeper{ + id + bondHeld + index + status + } + timeDelay + queued + } +} \ No newline at end of file diff --git a/src/gql/queries/queueTimelines.gql b/src/gql/queries/queueTimelines.gql new file mode 100644 index 0000000..05cd5d3 --- /dev/null +++ b/src/gql/queries/queueTimelines.gql @@ -0,0 +1,13 @@ +query queueTimelines($block: Block_height, $where: QueueTimeline_filter, $orderBy: QueueTimeline_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + queueTimelines(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + keeper{ + id + bondHeld + index + status + } + timeDelay + queued + } +} \ No newline at end of file diff --git a/src/gql/queries/runner.gql b/src/gql/queries/runner.gql new file mode 100644 index 0000000..0f77087 --- /dev/null +++ b/src/gql/queries/runner.gql @@ -0,0 +1,7 @@ +query runner($id: ID!, $block: Block_height){ + runner(id: $id, block: $block){ + id + bondHeld + createdAt + } +} \ No newline at end of file diff --git a/src/gql/queries/runners.gql b/src/gql/queries/runners.gql new file mode 100644 index 0000000..b3dd8a0 --- /dev/null +++ b/src/gql/queries/runners.gql @@ -0,0 +1,7 @@ +query runners($block: Block_height, $where: Runner_filter, $orderBy: Runner_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + runners(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + bondHeld + createdAt + } +} \ No newline at end of file diff --git a/src/gql/queries/strategies.gql b/src/gql/queries/strategies.gql new file mode 100644 index 0000000..a278bd6 --- /dev/null +++ b/src/gql/queries/strategies.gql @@ -0,0 +1,61 @@ +query strategies($where: Vault_filter, $orderBy: Vault_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $block: Block_height, $where1: Strategy_filter, $orderBy1: Strategy_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int){ + strategies(block: $block, where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + name + vault(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + createdAt + admin + creator{ + id + revenue + totalValueLocked + totalYield + } + executionBundle + } +} \ No newline at end of file diff --git a/src/gql/queries/strategy.gql b/src/gql/queries/strategy.gql new file mode 100644 index 0000000..3cfefdf --- /dev/null +++ b/src/gql/queries/strategy.gql @@ -0,0 +1,61 @@ +query strategy($where: Vault_filter, $orderBy: Vault_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $id: ID!, $block: Block_height){ + strategy(id: $id, block: $block){ + id + name + vault(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + createdAt + admin + creator{ + id + revenue + totalValueLocked + totalYield + } + executionBundle + } +} \ No newline at end of file diff --git a/src/gql/queries/vault.gql b/src/gql/queries/vault.gql new file mode 100644 index 0000000..1b4a5ca --- /dev/null +++ b/src/gql/queries/vault.gql @@ -0,0 +1,114 @@ +query vault($where: VaultStateChanged_filter, $orderBy: VaultStateChanged_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: VaultSnapshot_filter, $orderBy1: VaultSnapshot_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $where2: WhiteListVaultPermission_filter, $orderBy2: WhiteListVaultPermission_orderBy, $orderDirection2: OrderDirection, $first2: Int, $skip2: Int, $where3: VaultPosition_filter, $orderBy3: VaultPosition_orderBy, $orderDirection3: OrderDirection, $first3: Int, $skip3: Int, $where4: Depositor_filter, $orderBy4: Depositor_orderBy, $orderDirection4: OrderDirection, $first4: Int, $skip4: Int, $where5: Job_filter, $orderBy5: Job_orderBy, $orderDirection5: OrderDirection, $first5: Int, $skip5: Int, $id: ID!, $block: Block_height){ + vault(id: $id, block: $block){ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + statusUpdates(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + status + } + strategyToken{ + id + name + createdAt + admin + executionBundle + } + snapshots(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timestamp + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + annualFeeAPR + dailyFeeAPR + weeklyFeeAPR + transactionHash + } + permissions(where: $where2, orderBy: $orderBy2, orderDirection: $orderDirection2, first: $first2, skip: $skip2){ + id + addresses + timestamp + updatedTimestamp + } + positions(where: $where3, orderBy: $orderBy3, orderDirection: $orderDirection3, first: $first3, skip: $skip3){ + id + upperTick + lowerTick + relativeWeight + timestamp + } + depositors(where: $where4, orderBy: $orderBy4, orderDirection: $orderDirection4, first: $first4, skip: $skip4){ + id + account + executor + depositCaller + depositedAmount0 + depositedAmount1 + withdrawnAmount0 + withdrawnAmount1 + liquidityAmount0 + liquidityAmount1 + createdTimestamp + updatedTimestamp + shares + } + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + jobs(where: $where5, orderBy: $orderBy5, orderDirection: $orderDirection5, first: $first5, skip: $skip5){ + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + status + failedCounts + jobHash + gasUsed + } + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultBeacon.gql b/src/gql/queries/vaultBeacon.gql new file mode 100644 index 0000000..d7fcd32 --- /dev/null +++ b/src/gql/queries/vaultBeacon.gql @@ -0,0 +1,11 @@ +query vaultBeacon($id: ID!, $block: Block_height){ + vaultBeacon(id: $id, block: $block){ + id + address + ipfsHash + name + status + timestamp + updateTimestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultBeacons.gql b/src/gql/queries/vaultBeacons.gql new file mode 100644 index 0000000..49cc26c --- /dev/null +++ b/src/gql/queries/vaultBeacons.gql @@ -0,0 +1,11 @@ +query vaultBeacons($block: Block_height, $where: VaultBeacon_filter, $orderBy: VaultBeacon_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultBeacons(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + address + ipfsHash + name + status + timestamp + updateTimestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultDeposit.gql b/src/gql/queries/vaultDeposit.gql new file mode 100644 index 0000000..d21207c --- /dev/null +++ b/src/gql/queries/vaultDeposit.gql @@ -0,0 +1,62 @@ +query vaultDeposit($id: ID!, $block: Block_height){ + vaultDeposit(id: $id, block: $block){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + amount0 + amount1 + token0 + token1 + sender + transactionHash + timeStamp + shares + executor + depositCaller + blockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultDeposits.gql b/src/gql/queries/vaultDeposits.gql new file mode 100644 index 0000000..0d07080 --- /dev/null +++ b/src/gql/queries/vaultDeposits.gql @@ -0,0 +1,62 @@ +query vaultDeposits($block: Block_height, $where: VaultDeposit_filter, $orderBy: VaultDeposit_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultDeposits(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + amount0 + amount1 + token0 + token1 + sender + transactionHash + timeStamp + shares + executor + depositCaller + blockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultGasDeposited.gql b/src/gql/queries/vaultGasDeposited.gql new file mode 100644 index 0000000..68e5244 --- /dev/null +++ b/src/gql/queries/vaultGasDeposited.gql @@ -0,0 +1,9 @@ +query vaultGasDeposited($id: ID!, $block: Block_height){ + vaultGasDeposited(id: $id, block: $block){ + id + timestamp + vault + origin + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultGasDepositeds.gql b/src/gql/queries/vaultGasDepositeds.gql new file mode 100644 index 0000000..d497621 --- /dev/null +++ b/src/gql/queries/vaultGasDepositeds.gql @@ -0,0 +1,9 @@ +query vaultGasDepositeds($block: Block_height, $where: VaultGasDeposited_filter, $orderBy: VaultGasDeposited_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultGasDepositeds(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vault + origin + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultGasUsed.gql b/src/gql/queries/vaultGasUsed.gql new file mode 100644 index 0000000..73f05b8 --- /dev/null +++ b/src/gql/queries/vaultGasUsed.gql @@ -0,0 +1,9 @@ +query vaultGasUsed($id: ID!, $block: Block_height){ + vaultGasUsed(id: $id, block: $block){ + id + timestamp + vault + actionHash + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultGasUseds.gql b/src/gql/queries/vaultGasUseds.gql new file mode 100644 index 0000000..d418e0d --- /dev/null +++ b/src/gql/queries/vaultGasUseds.gql @@ -0,0 +1,9 @@ +query vaultGasUseds($block: Block_height, $where: VaultGasUsed_filter, $orderBy: VaultGasUsed_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultGasUseds(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vault + actionHash + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultGasWithdrawn.gql b/src/gql/queries/vaultGasWithdrawn.gql new file mode 100644 index 0000000..08a410e --- /dev/null +++ b/src/gql/queries/vaultGasWithdrawn.gql @@ -0,0 +1,9 @@ +query vaultGasWithdrawn($id: ID!, $block: Block_height){ + vaultGasWithdrawn(id: $id, block: $block){ + id + timestamp + vault + to + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultGasWithdrawns.gql b/src/gql/queries/vaultGasWithdrawns.gql new file mode 100644 index 0000000..ff984d8 --- /dev/null +++ b/src/gql/queries/vaultGasWithdrawns.gql @@ -0,0 +1,9 @@ +query vaultGasWithdrawns($block: Block_height, $where: VaultGasWithdrawn_filter, $orderBy: VaultGasWithdrawn_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultGasWithdrawns(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vault + to + amount + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultPosition.gql b/src/gql/queries/vaultPosition.gql new file mode 100644 index 0000000..7e383a4 --- /dev/null +++ b/src/gql/queries/vaultPosition.gql @@ -0,0 +1,55 @@ +query vaultPosition($id: ID!, $block: Block_height){ + vaultPosition(id: $id, block: $block){ + id + upperTick + lowerTick + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + relativeWeight + timestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultPositions.gql b/src/gql/queries/vaultPositions.gql new file mode 100644 index 0000000..a3de3b6 --- /dev/null +++ b/src/gql/queries/vaultPositions.gql @@ -0,0 +1,55 @@ +query vaultPositions($block: Block_height, $where: VaultPosition_filter, $orderBy: VaultPosition_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultPositions(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + upperTick + lowerTick + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + relativeWeight + timestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultSnapshot.gql b/src/gql/queries/vaultSnapshot.gql new file mode 100644 index 0000000..ea0664a --- /dev/null +++ b/src/gql/queries/vaultSnapshot.gql @@ -0,0 +1,62 @@ +query vaultSnapshot($id: ID!, $block: Block_height){ + vaultSnapshot(id: $id, block: $block){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + annualFeeAPR + dailyFeeAPR + weeklyFeeAPR + transactionHash + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultSnapshots.gql b/src/gql/queries/vaultSnapshots.gql new file mode 100644 index 0000000..bccd7a6 --- /dev/null +++ b/src/gql/queries/vaultSnapshots.gql @@ -0,0 +1,62 @@ +query vaultSnapshots($block: Block_height, $where: VaultSnapshot_filter, $orderBy: VaultSnapshot_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultSnapshots(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + vaultAddress{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + annualFeeAPR + dailyFeeAPR + weeklyFeeAPR + transactionHash + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultStateChanged.gql b/src/gql/queries/vaultStateChanged.gql new file mode 100644 index 0000000..575f321 --- /dev/null +++ b/src/gql/queries/vaultStateChanged.gql @@ -0,0 +1,53 @@ +query vaultStateChanged($id: ID!, $block: Block_height){ + vaultStateChanged(id: $id, block: $block){ + id + timeStamp + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + status + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultStateChangeds.gql b/src/gql/queries/vaultStateChangeds.gql new file mode 100644 index 0000000..27762db --- /dev/null +++ b/src/gql/queries/vaultStateChangeds.gql @@ -0,0 +1,53 @@ +query vaultStateChangeds($block: Block_height, $where: VaultStateChanged_filter, $orderBy: VaultStateChanged_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultStateChangeds(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + status + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultTransfer.gql b/src/gql/queries/vaultTransfer.gql new file mode 100644 index 0000000..956c739 --- /dev/null +++ b/src/gql/queries/vaultTransfer.gql @@ -0,0 +1,10 @@ +query vaultTransfer($id: ID!, $block: Block_height){ + vaultTransfer(id: $id, block: $block){ + id + from + to + value + timestamp + blockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultTransfers.gql b/src/gql/queries/vaultTransfers.gql new file mode 100644 index 0000000..ca856a5 --- /dev/null +++ b/src/gql/queries/vaultTransfers.gql @@ -0,0 +1,10 @@ +query vaultTransfers($block: Block_height, $where: VaultTransfer_filter, $orderBy: VaultTransfer_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultTransfers(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + from + to + value + timestamp + blockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultWithdraw.gql b/src/gql/queries/vaultWithdraw.gql new file mode 100644 index 0000000..6f7f60d --- /dev/null +++ b/src/gql/queries/vaultWithdraw.gql @@ -0,0 +1,60 @@ +query vaultWithdraw($id: ID!, $block: Block_height){ + vaultWithdraw(id: $id, block: $block){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + amount0 + amount1 + token0 + token1 + timeStamp + shares + sender + transactionHash + blockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/vaultWithdraws.gql b/src/gql/queries/vaultWithdraws.gql new file mode 100644 index 0000000..99813ec --- /dev/null +++ b/src/gql/queries/vaultWithdraws.gql @@ -0,0 +1,60 @@ +query vaultWithdraws($block: Block_height, $where: VaultWithdraw_filter, $orderBy: VaultWithdraw_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + vaultWithdraws(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + amount0 + amount1 + token0 + token1 + timeStamp + shares + sender + transactionHash + blockNumber + } +} \ No newline at end of file diff --git a/src/gql/queries/vaults.gql b/src/gql/queries/vaults.gql new file mode 100644 index 0000000..1c02342 --- /dev/null +++ b/src/gql/queries/vaults.gql @@ -0,0 +1,114 @@ +query vaults($where: VaultStateChanged_filter, $orderBy: VaultStateChanged_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int, $where1: VaultSnapshot_filter, $orderBy1: VaultSnapshot_orderBy, $orderDirection1: OrderDirection, $first1: Int, $skip1: Int, $where2: WhiteListVaultPermission_filter, $orderBy2: WhiteListVaultPermission_orderBy, $orderDirection2: OrderDirection, $first2: Int, $skip2: Int, $where3: VaultPosition_filter, $orderBy3: VaultPosition_orderBy, $orderDirection3: OrderDirection, $first3: Int, $skip3: Int, $where4: Depositor_filter, $orderBy4: Depositor_orderBy, $orderDirection4: OrderDirection, $first4: Int, $skip4: Int, $where5: Job_filter, $orderBy5: Job_orderBy, $orderDirection5: OrderDirection, $first5: Int, $skip5: Int, $block: Block_height, $where6: Vault_filter, $orderBy6: Vault_orderBy, $orderDirection6: OrderDirection, $first6: Int, $skip6: Int){ + vaults(block: $block, where: $where6, orderBy: $orderBy6, orderDirection: $orderDirection6, first: $first6, skip: $skip6){ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + statusUpdates(where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timeStamp + status + } + strategyToken{ + id + name + createdAt + admin + executionBundle + } + snapshots(where: $where1, orderBy: $orderBy1, orderDirection: $orderDirection1, first: $first1, skip: $skip1){ + id + timestamp + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + annualFeeAPR + dailyFeeAPR + weeklyFeeAPR + transactionHash + } + permissions(where: $where2, orderBy: $orderBy2, orderDirection: $orderDirection2, first: $first2, skip: $skip2){ + id + addresses + timestamp + updatedTimestamp + } + positions(where: $where3, orderBy: $orderBy3, orderDirection: $orderDirection3, first: $first3, skip: $skip3){ + id + upperTick + lowerTick + relativeWeight + timestamp + } + depositors(where: $where4, orderBy: $orderBy4, orderDirection: $orderDirection4, first: $first4, skip: $skip4){ + id + account + executor + depositCaller + depositedAmount0 + depositedAmount1 + withdrawnAmount0 + withdrawnAmount1 + liquidityAmount0 + liquidityAmount1 + createdTimestamp + updatedTimestamp + shares + } + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + jobs(where: $where5, orderBy: $orderBy5, orderDirection: $orderDirection5, first: $first5, skip: $skip5){ + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + status + failedCounts + jobHash + gasUsed + } + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } +} \ No newline at end of file diff --git a/src/gql/queries/vote.gql b/src/gql/queries/vote.gql new file mode 100644 index 0000000..01fc22c --- /dev/null +++ b/src/gql/queries/vote.gql @@ -0,0 +1,24 @@ +query vote($id: ID!, $block: Block_height){ + vote(id: $id, block: $block){ + id + timestamp + by{ + id + bondHeld + index + status + } + action{ + id + timestamp + lastUpdated + state + status + recipients + vault + transactionHash + hash + gasUsed + } + } +} \ No newline at end of file diff --git a/src/gql/queries/votes.gql b/src/gql/queries/votes.gql new file mode 100644 index 0000000..8a4164d --- /dev/null +++ b/src/gql/queries/votes.gql @@ -0,0 +1,24 @@ +query votes($block: Block_height, $where: Vote_filter, $orderBy: Vote_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + votes(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + timestamp + by{ + id + bondHeld + index + status + } + action{ + id + timestamp + lastUpdated + state + status + recipients + vault + transactionHash + hash + gasUsed + } + } +} \ No newline at end of file diff --git a/src/gql/queries/whiteListManager.gql b/src/gql/queries/whiteListManager.gql new file mode 100644 index 0000000..6a1a421 --- /dev/null +++ b/src/gql/queries/whiteListManager.gql @@ -0,0 +1,14 @@ +query whiteListManager($id: ID!, $block: Block_height){ + whiteListManager(id: $id, block: $block){ + id + address + vault + timestamp + permission{ + id + addresses + timestamp + updatedTimestamp + } + } +} \ No newline at end of file diff --git a/src/gql/queries/whiteListManagers.gql b/src/gql/queries/whiteListManagers.gql new file mode 100644 index 0000000..f807be6 --- /dev/null +++ b/src/gql/queries/whiteListManagers.gql @@ -0,0 +1,14 @@ +query whiteListManagers($block: Block_height, $where: WhiteListManager_filter, $orderBy: WhiteListManager_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + whiteListManagers(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + address + vault + timestamp + permission{ + id + addresses + timestamp + updatedTimestamp + } + } +} \ No newline at end of file diff --git a/src/gql/queries/whiteListVaultPermission.gql b/src/gql/queries/whiteListVaultPermission.gql new file mode 100644 index 0000000..01157fb --- /dev/null +++ b/src/gql/queries/whiteListVaultPermission.gql @@ -0,0 +1,60 @@ +query whiteListVaultPermission($id: ID!, $block: Block_height){ + whiteListVaultPermission(id: $id, block: $block){ + id + manager{ + id + address + vault + timestamp + } + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + addresses + timestamp + updatedTimestamp + } +} \ No newline at end of file diff --git a/src/gql/queries/whiteListVaultPermissions.gql b/src/gql/queries/whiteListVaultPermissions.gql new file mode 100644 index 0000000..fdb752a --- /dev/null +++ b/src/gql/queries/whiteListVaultPermissions.gql @@ -0,0 +1,60 @@ +query whiteListVaultPermissions($block: Block_height, $where: WhiteListVaultPermission_filter, $orderBy: WhiteListVaultPermission_orderBy, $orderDirection: OrderDirection, $first: Int, $skip: Int){ + whiteListVaultPermissions(block: $block, where: $where, orderBy: $orderBy, orderDirection: $orderDirection, first: $first, skip: $skip){ + id + manager{ + id + address + vault + timestamp + } + vault{ + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 + } + addresses + timestamp + updatedTimestamp + } +} \ No newline at end of file diff --git a/src/gql/subscriptions/index.ts b/src/gql/subscriptions/index.ts new file mode 100644 index 0000000..f12910c --- /dev/null +++ b/src/gql/subscriptions/index.ts @@ -0,0 +1,4 @@ +import fs from 'fs'; +import path from 'path'; + +export const onEvent = fs.readFileSync(path.join(__dirname, 'onEvent.gql'), 'utf8'); diff --git a/src/gql/subscriptions/onEvent.gql b/src/gql/subscriptions/onEvent.gql new file mode 100644 index 0000000..2e5eb88 --- /dev/null +++ b/src/gql/subscriptions/onEvent.gql @@ -0,0 +1,208 @@ +subscription onEvent{ + onEvent{ + block{ + cid + hash + number + timestamp + parentHash + } + tx{ + hash + index + from + to + } + contract + eventIndex + event{ + ... on AdminChangedEvent { + previousAdmin + newAdmin + } + ... on UpgradedEvent { + implementation + } + ... on BeaconUpgradedEvent { + beacon + } + ... on LeaveQueuedEvent { + keeper + leaveTimestamp + } + ... on OwnershipTransferredEvent { + previousOwner + newOwner + } + ... on PermissionChangedEvent { + _subject + _permissionType + } + ... on ActionExecutedEvent { + actionHash + from + rewardPerAction + } + ... on ActionFailedEvent { + actionHash + } + ... on VoteEvent { + actionHash + from + approved + } + ... on ApprovalEvent { + owner + approved + tokenId + spender + value + } + ... on ApprovalForAllEvent { + owner + operator + approved + } + ... on PausedEvent { + account + } + ... on RoleAdminChangedEvent { + role + previousAdminRole + newAdminRole + } + ... on RoleGrantedEvent { + role + account + sender + } + ... on RoleRevokedEvent { + role + account + sender + } + ... on StrategyCreatedEvent { + owner + tokenId + name + } + ... on TransferEvent { + from + to + tokenId + value + } + ... on UnpausedEvent { + account + } + ... on BeaconConfigUpdatedEvent { + _name + _ipfsHash + } + ... on BeaconDeregisteredEvent { + _name + } + ... on BeaconRegisteredEvent { + _name + _address + _ipfsHash + } + ... on VaultCreatedEvent { + deployer + vault + beaconName + tokenId + vaultManager + } + ... on VaultStateChangedEvent { + vault + newState + } + ... on BundleRegisteredEvent { + hash + bundle + host + source + output + infoHash + active + creator + } + ... on BundleStateChangeEvent { + hash + toggle + } + ... on DepositedEvent { + origin + target + amount + } + ... on EtherUsedEvent { + account + amount + jobHash + } + ... on WithdrawnEvent { + targetAddress + to + amount + } + ... on ManagerAddedEvent { + vaultAddress + manager + } + ... on PermissionsAddedEvent { + whitelistManager + vault + addressesAdded + } + ... on PermissionsRemovedEvent { + whitelistManager + vault + addressesRemoved + } + ... on DepositEvent { + sender + to + shares + amount0 + amount1 + } + ... on FeesEarnedEvent { + amount0Earned + amount1Earned + } + ... on SnapshotEvent { + sqrtPriceX96 + totalAmount0 + totalAmount1 + totalSupply + } + ... on WithdrawEvent { + sender + to + shares + amount0 + amount1 + } + ... on JobExecutedEvent { + jobHash + executor + } + ... on JobRegisteredEvent { + jobInfo + targetAddresses + jobHash + name + ipfsForJobDetails + } + ... on JobToggledByCreatorEvent { + jobHash + toggle + } + } + proof{ + data + } + } +} \ No newline at end of file diff --git a/src/hooks.ts b/src/hooks.ts new file mode 100644 index 0000000..d45498b --- /dev/null +++ b/src/hooks.ts @@ -0,0 +1,86 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; + +import { + ResultEvent, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + updateStateForMappingType, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + updateStateForElementaryType +} from '@cerc-io/util'; + +import { Indexer } from './indexer'; + +/** + * Hook function to store an initial state. + * @param indexer Indexer instance. + * @param blockHash Hash of the concerned block. + * @param contractAddress Address of the concerned contract. + * @returns Data block to be stored. + */ +export async function createInitialState (indexer: Indexer, contractAddress: string, blockHash: string): Promise { + assert(indexer); + assert(blockHash); + assert(contractAddress); + + // Store an empty State. + const stateData: any = { + state: {} + }; + + // Use updateStateForElementaryType to update initial state with an elementary property. + // Eg. const stateData = updateStateForElementaryType(stateData, '_totalBalance', result.value.toString()); + + // Use updateStateForMappingType to update initial state with a nested property. + // Eg. const stateData = updateStateForMappingType(stateData, '_allowances', [owner, spender], allowance.value.toString()); + + // Return initial state data to be saved. + return stateData; +} + +/** + * Hook function to create state diff. + * @param indexer Indexer instance that contains methods to fetch the contract variable values. + * @param blockHash Block hash of the concerned block. + */ +export async function createStateDiff (indexer: Indexer, blockHash: string): Promise { + assert(indexer); + assert(blockHash); + + // Use indexer.createDiff() method to save custom state diff(s). +} + +/** + * Hook function to create state checkpoint + * @param indexer Indexer instance. + * @param contractAddress Address of the concerned contract. + * @param blockHash Block hash of the concerned block. + * @returns Whether to disable default checkpoint. If false, the state from this hook is updated with that from default checkpoint. + */ +export async function createStateCheckpoint (indexer: Indexer, contractAddress: string, blockHash: string): Promise { + assert(indexer); + assert(blockHash); + assert(contractAddress); + + // Use indexer.createStateCheckpoint() method to create a custom checkpoint. + + // Return false to update the state created by this hook by auto-generated checkpoint state. + // Return true to disable update of the state created by this hook by auto-generated checkpoint state. + return false; +} + +/** + * Event hook function. + * @param indexer Indexer instance that contains methods to fetch and update the contract values in the database. + * @param eventData ResultEvent object containing event information. + */ +export async function handleEvent (indexer: Indexer, eventData: ResultEvent): Promise { + assert(indexer); + assert(eventData); + + // Use indexer methods to index data. + // Pass `diff` parameter to indexer methods as true to save an auto-generated state from the indexed data. +} diff --git a/src/indexer.ts b/src/indexer.ts new file mode 100644 index 0000000..e04e2ac --- /dev/null +++ b/src/indexer.ts @@ -0,0 +1,1528 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; +import { DeepPartial, FindConditions, FindManyOptions, ObjectLiteral } from 'typeorm'; +import debug from 'debug'; +import { ethers, constants, providers } from 'ethers'; +import { GraphQLResolveInfo } from 'graphql'; + +import { JsonFragment } from '@ethersproject/abi'; +import { MappingKey, StorageLayout } from '@cerc-io/solidity-mapper'; +import { + Indexer as BaseIndexer, + IndexerInterface, + ValueResult, + ServerConfig, + JobQueue, + Where, + QueryOptions, + BlockHeight, + ResultMeta, + updateSubgraphState, + dumpSubgraphState, + GraphWatcherInterface, + StateKind, + StateStatus, + ResultEvent, + getResultEvent, + DatabaseInterface, + Clients, + EthClient, + UpstreamConfig, + EthFullBlock, + EthFullTransaction, + ExtraEventData +} from '@cerc-io/util'; +import { initClients } from '@cerc-io/cli'; +import { GraphWatcher } from '@cerc-io/graph-node'; + +import KeeperRegistryArtifacts from './artifacts/KeeperRegistry.json'; +import OrchestratorArtifacts from './artifacts/Orchestrator.json'; +import StrategyRegistryArtifacts from './artifacts/StrategyRegistry.json'; +import VaultRegistryArtifacts from './artifacts/VaultRegistry.json'; +import BundleRegistryArtifacts from './artifacts/BundleRegistry.json'; +import GasVaultArtifacts from './artifacts/GasVault.json'; +import WhitelistRegistryArtifacts from './artifacts/WhitelistRegistry.json'; +import VaultArtifacts from './artifacts/Vault.json'; +import DynamicJobArtifacts from './artifacts/DynamicJob.json'; +import { Database, ENTITIES, SUBGRAPH_ENTITIES } from './database'; +import { createInitialState, handleEvent, createStateDiff, createStateCheckpoint } from './hooks'; +import { Contract } from './entity/Contract'; +import { Event } from './entity/Event'; +import { SyncStatus } from './entity/SyncStatus'; +import { StateSyncStatus } from './entity/StateSyncStatus'; +import { BlockProgress } from './entity/BlockProgress'; +import { State } from './entity/State'; +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { Keeper } from './entity/Keeper'; +import { Runner } from './entity/Runner'; +import { QueueTimeline } from './entity/QueueTimeline'; +import { PermissionUpdate } from './entity/PermissionUpdate'; +import { OrchestratorAction } from './entity/OrchestratorAction'; +import { Vote } from './entity/Vote'; +import { ActionFailure } from './entity/ActionFailure'; +import { Creator } from './entity/Creator'; +import { CreatorWithdrawal } from './entity/CreatorWithdrawal'; +import { Strategy } from './entity/Strategy'; +import { Vault } from './entity/Vault'; +import { VaultSnapshot } from './entity/VaultSnapshot'; +import { PrevVaultSnapshot } from './entity/PrevVaultSnapshot'; +import { PrevDailyVaultSnapshot } from './entity/PrevDailyVaultSnapshot'; +import { PrevMonthlyVaultSnapshot } from './entity/PrevMonthlyVaultSnapshot'; +import { PrevAnnualVaultSnapshot } from './entity/PrevAnnualVaultSnapshot'; +import { PrevWeeklyVaultSnapshot } from './entity/PrevWeeklyVaultSnapshot'; +import { VaultStateChanged } from './entity/VaultStateChanged'; +import { VaultDeposit } from './entity/VaultDeposit'; +import { VaultWithdraw } from './entity/VaultWithdraw'; +import { Depositor } from './entity/Depositor'; +import { VaultBeacon } from './entity/VaultBeacon'; +import { VaultPosition } from './entity/VaultPosition'; +import { LiquiditySteer } from './entity/LiquiditySteer'; +import { OrchestratorReward } from './entity/OrchestratorReward'; +import { OrchestratorRewardTracker } from './entity/OrchestratorRewardTracker'; +import { OrchestratorRewardSnapshot } from './entity/OrchestratorRewardSnapshot'; +import { Bundle } from './entity/Bundle'; +import { Job } from './entity/Job'; +import { JobExecution } from './entity/JobExecution'; +import { JobGasDeposited } from './entity/JobGasDeposited'; +import { JobGasWithdrawn } from './entity/JobGasWithdrawn'; +import { VaultGasUsed } from './entity/VaultGasUsed'; +import { VaultGasDeposited } from './entity/VaultGasDeposited'; +import { VaultGasWithdrawn } from './entity/VaultGasWithdrawn'; +import { WhiteListManager } from './entity/WhiteListManager'; +import { WhiteListVaultPermission } from './entity/WhiteListVaultPermission'; +import { LeaderBoard } from './entity/LeaderBoard'; +import { VaultTransfer } from './entity/VaultTransfer'; +/* eslint-enable @typescript-eslint/no-unused-vars */ + +import { FrothyEntity } from './entity/FrothyEntity'; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const log = debug('vulcanize:indexer'); + +const KIND_KEEPERREGISTRY = 'KeeperRegistry'; + +const KIND_ORCHESTRATOR = 'Orchestrator'; + +const KIND_STRATEGYREGISTRY = 'StrategyRegistry'; + +const KIND_VAULTREGISTRY = 'VaultRegistry'; + +const KIND_BUNDLEREGISTRY = 'BundleRegistry'; + +const KIND_GASVAULT = 'GasVault'; + +const KIND_WHITELISTREGISTRY = 'WhitelistRegistry'; + +const KIND_VAULT = 'Vault'; + +const KIND_DYNAMICJOB = 'DynamicJob'; + +export class Indexer implements IndexerInterface { + _db: Database; + _ethClient: EthClient; + _ethProvider: providers.JsonRpcProvider; + _baseIndexer: BaseIndexer; + _serverConfig: ServerConfig; + _upstreamConfig: UpstreamConfig; + _graphWatcher: GraphWatcher; + + _abiMap: Map; + _storageLayoutMap: Map; + _contractMap: Map; + eventSignaturesMap: Map; + + _entityTypesMap: Map; + _relationsMap: Map; + + _subgraphStateMap: Map; + + constructor ( + config: { + server: ServerConfig; + upstream: UpstreamConfig; + }, + db: DatabaseInterface, + clients: Clients, + ethProvider: providers.JsonRpcProvider, + jobQueue: JobQueue, + graphWatcher?: GraphWatcherInterface + ) { + assert(db); + assert(clients.ethClient); + + this._db = db as Database; + this._ethClient = clients.ethClient; + this._ethProvider = ethProvider; + this._serverConfig = config.server; + this._upstreamConfig = config.upstream; + this._baseIndexer = new BaseIndexer(config, this._db, this._ethClient, this._ethProvider, jobQueue); + assert(graphWatcher); + this._graphWatcher = graphWatcher as GraphWatcher; + + this._abiMap = new Map(); + this._storageLayoutMap = new Map(); + this._contractMap = new Map(); + this.eventSignaturesMap = new Map(); + + const { abi: KeeperRegistryABI } = KeeperRegistryArtifacts; + + const { abi: OrchestratorABI } = OrchestratorArtifacts; + + const { abi: StrategyRegistryABI } = StrategyRegistryArtifacts; + + const { abi: VaultRegistryABI } = VaultRegistryArtifacts; + + const { abi: BundleRegistryABI } = BundleRegistryArtifacts; + + const { abi: GasVaultABI } = GasVaultArtifacts; + + const { abi: WhitelistRegistryABI } = WhitelistRegistryArtifacts; + + const { abi: VaultABI } = VaultArtifacts; + + const { abi: DynamicJobABI } = DynamicJobArtifacts; + + assert(KeeperRegistryABI); + this._abiMap.set(KIND_KEEPERREGISTRY, KeeperRegistryABI); + + const KeeperRegistryContractInterface = new ethers.utils.Interface(KeeperRegistryABI); + this._contractMap.set(KIND_KEEPERREGISTRY, KeeperRegistryContractInterface); + + const KeeperRegistryEventSignatures = Object.values(KeeperRegistryContractInterface.events).map(value => { + return KeeperRegistryContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_KEEPERREGISTRY, KeeperRegistryEventSignatures); + + assert(OrchestratorABI); + this._abiMap.set(KIND_ORCHESTRATOR, OrchestratorABI); + + const OrchestratorContractInterface = new ethers.utils.Interface(OrchestratorABI); + this._contractMap.set(KIND_ORCHESTRATOR, OrchestratorContractInterface); + + const OrchestratorEventSignatures = Object.values(OrchestratorContractInterface.events).map(value => { + return OrchestratorContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_ORCHESTRATOR, OrchestratorEventSignatures); + + assert(StrategyRegistryABI); + this._abiMap.set(KIND_STRATEGYREGISTRY, StrategyRegistryABI); + + const StrategyRegistryContractInterface = new ethers.utils.Interface(StrategyRegistryABI); + this._contractMap.set(KIND_STRATEGYREGISTRY, StrategyRegistryContractInterface); + + const StrategyRegistryEventSignatures = Object.values(StrategyRegistryContractInterface.events).map(value => { + return StrategyRegistryContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_STRATEGYREGISTRY, StrategyRegistryEventSignatures); + + assert(VaultRegistryABI); + this._abiMap.set(KIND_VAULTREGISTRY, VaultRegistryABI); + + const VaultRegistryContractInterface = new ethers.utils.Interface(VaultRegistryABI); + this._contractMap.set(KIND_VAULTREGISTRY, VaultRegistryContractInterface); + + const VaultRegistryEventSignatures = Object.values(VaultRegistryContractInterface.events).map(value => { + return VaultRegistryContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_VAULTREGISTRY, VaultRegistryEventSignatures); + + assert(BundleRegistryABI); + this._abiMap.set(KIND_BUNDLEREGISTRY, BundleRegistryABI); + + const BundleRegistryContractInterface = new ethers.utils.Interface(BundleRegistryABI); + this._contractMap.set(KIND_BUNDLEREGISTRY, BundleRegistryContractInterface); + + const BundleRegistryEventSignatures = Object.values(BundleRegistryContractInterface.events).map(value => { + return BundleRegistryContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_BUNDLEREGISTRY, BundleRegistryEventSignatures); + + assert(GasVaultABI); + this._abiMap.set(KIND_GASVAULT, GasVaultABI); + + const GasVaultContractInterface = new ethers.utils.Interface(GasVaultABI); + this._contractMap.set(KIND_GASVAULT, GasVaultContractInterface); + + const GasVaultEventSignatures = Object.values(GasVaultContractInterface.events).map(value => { + return GasVaultContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_GASVAULT, GasVaultEventSignatures); + + assert(WhitelistRegistryABI); + this._abiMap.set(KIND_WHITELISTREGISTRY, WhitelistRegistryABI); + + const WhitelistRegistryContractInterface = new ethers.utils.Interface(WhitelistRegistryABI); + this._contractMap.set(KIND_WHITELISTREGISTRY, WhitelistRegistryContractInterface); + + const WhitelistRegistryEventSignatures = Object.values(WhitelistRegistryContractInterface.events).map(value => { + return WhitelistRegistryContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_WHITELISTREGISTRY, WhitelistRegistryEventSignatures); + + assert(VaultABI); + this._abiMap.set(KIND_VAULT, VaultABI); + + const VaultContractInterface = new ethers.utils.Interface(VaultABI); + this._contractMap.set(KIND_VAULT, VaultContractInterface); + + const VaultEventSignatures = Object.values(VaultContractInterface.events).map(value => { + return VaultContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_VAULT, VaultEventSignatures); + + assert(DynamicJobABI); + this._abiMap.set(KIND_DYNAMICJOB, DynamicJobABI); + + const DynamicJobContractInterface = new ethers.utils.Interface(DynamicJobABI); + this._contractMap.set(KIND_DYNAMICJOB, DynamicJobContractInterface); + + const DynamicJobEventSignatures = Object.values(DynamicJobContractInterface.events).map(value => { + return DynamicJobContractInterface.getEventTopic(value); + }); + this.eventSignaturesMap.set(KIND_DYNAMICJOB, DynamicJobEventSignatures); + + this._entityTypesMap = new Map(); + this._populateEntityTypesMap(); + + this._relationsMap = new Map(); + this._populateRelationsMap(); + + this._subgraphStateMap = new Map(); + } + + get serverConfig (): ServerConfig { + return this._serverConfig; + } + + get upstreamConfig (): UpstreamConfig { + return this._upstreamConfig; + } + + get storageLayoutMap (): Map { + return this._storageLayoutMap; + } + + get contractMap (): Map { + return this._contractMap; + } + + get graphWatcher (): GraphWatcher { + return this._graphWatcher; + } + + async init (): Promise { + await this._baseIndexer.fetchContracts(); + await this._baseIndexer.fetchStateStatus(); + } + + async switchClients (): Promise { + const { ethClient, ethProvider } = await this._baseIndexer.switchClients(initClients); + this._ethClient = ethClient; + this._ethProvider = ethProvider; + this._graphWatcher.switchClients({ ethClient, ethProvider }); + } + + async isGetLogsRequestsSlow (): Promise { + return this._baseIndexer.isGetLogsRequestsSlow(); + } + + async getMetaData (block: BlockHeight): Promise { + return this._baseIndexer.getMetaData(block); + } + + getResultEvent (event: Event): ResultEvent { + return getResultEvent(event); + } + + async getStorageValue (storageLayout: StorageLayout, blockHash: string, contractAddress: string, variable: string, ...mappingKeys: MappingKey[]): Promise { + return this._baseIndexer.getStorageValue( + storageLayout, + blockHash, + contractAddress, + variable, + ...mappingKeys + ); + } + + async getEntitiesForBlock (blockHash: string, tableName: string): Promise { + return this._db.getEntitiesForBlock(blockHash, tableName); + } + + async processInitialState (contractAddress: string, blockHash: string): Promise { + // Call initial state hook. + return createInitialState(this, contractAddress, blockHash); + } + + async processStateCheckpoint (contractAddress: string, blockHash: string): Promise { + // Call checkpoint hook. + return createStateCheckpoint(this, contractAddress, blockHash); + } + + async processCanonicalBlock (blockHash: string, blockNumber: number): Promise { + console.time('time:indexer#processCanonicalBlock-finalize_auto_diffs'); + // Finalize staged diff blocks if any. + await this._baseIndexer.finalizeDiffStaged(blockHash); + console.timeEnd('time:indexer#processCanonicalBlock-finalize_auto_diffs'); + + // Call custom stateDiff hook. + await createStateDiff(this, blockHash); + + this._graphWatcher.pruneEntityCacheFrothyBlocks(blockHash, blockNumber); + } + + async processCheckpoint (blockHash: string): Promise { + // Return if checkpointInterval is <= 0. + const checkpointInterval = this._serverConfig.checkpointInterval; + if (checkpointInterval <= 0) return; + + console.time('time:indexer#processCheckpoint-checkpoint'); + await this._baseIndexer.processCheckpoint(this, blockHash, checkpointInterval); + console.timeEnd('time:indexer#processCheckpoint-checkpoint'); + } + + async processCLICheckpoint (contractAddress: string, blockHash?: string): Promise { + return this._baseIndexer.processCLICheckpoint(this, contractAddress, blockHash); + } + + async getPrevState (blockHash: string, contractAddress: string, kind?: string): Promise { + return this._db.getPrevState(blockHash, contractAddress, kind); + } + + async getLatestState (contractAddress: string, kind: StateKind | null, blockNumber?: number): Promise { + return this._db.getLatestState(contractAddress, kind, blockNumber); + } + + async getStatesByHash (blockHash: string): Promise { + return this._baseIndexer.getStatesByHash(blockHash); + } + + async getStateByCID (cid: string): Promise { + return this._baseIndexer.getStateByCID(cid); + } + + async getStates (where: FindConditions): Promise { + return this._db.getStates(where); + } + + getStateData (state: State): any { + return this._baseIndexer.getStateData(state); + } + + // Method used to create auto diffs (diff_staged). + async createDiffStaged (contractAddress: string, blockHash: string, data: any): Promise { + console.time('time:indexer#createDiffStaged-auto_diff'); + await this._baseIndexer.createDiffStaged(contractAddress, blockHash, data); + console.timeEnd('time:indexer#createDiffStaged-auto_diff'); + } + + // Method to be used by createStateDiff hook. + async createDiff (contractAddress: string, blockHash: string, data: any): Promise { + const block = await this.getBlockProgress(blockHash); + assert(block); + + await this._baseIndexer.createDiff(contractAddress, block, data); + } + + // Method to be used by createStateCheckpoint hook. + async createStateCheckpoint (contractAddress: string, blockHash: string, data: any): Promise { + const block = await this.getBlockProgress(blockHash); + assert(block); + + return this._baseIndexer.createStateCheckpoint(contractAddress, block, data); + } + + // Method to be used by export-state CLI. + async createCheckpoint (contractAddress: string, blockHash: string): Promise { + const block = await this.getBlockProgress(blockHash); + assert(block); + + return this._baseIndexer.createCheckpoint(this, contractAddress, block); + } + + // Method to be used by fill-state CLI. + async createInit (blockHash: string, blockNumber: number): Promise { + // Create initial state for contracts. + await this._baseIndexer.createInit(this, blockHash, blockNumber); + } + + async saveOrUpdateState (state: State): Promise { + return this._baseIndexer.saveOrUpdateState(state); + } + + async removeStates (blockNumber: number, kind: StateKind): Promise { + await this._baseIndexer.removeStates(blockNumber, kind); + } + + async getSubgraphEntity ( + entity: new () => Entity, + id: string, + block: BlockHeight, + queryInfo: GraphQLResolveInfo + ): Promise { + const data = await this._graphWatcher.getEntity(entity, id, this._relationsMap, block, queryInfo); + + return data; + } + + async getSubgraphEntities ( + entity: new () => Entity, + block: BlockHeight, + where: { [key: string]: any } = {}, + queryOptions: QueryOptions = {}, + queryInfo: GraphQLResolveInfo + ): Promise { + return this._graphWatcher.getEntities(entity, this._relationsMap, block, where, queryOptions, queryInfo); + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + async triggerIndexingOnEvent (event: Event, extraData: ExtraEventData): Promise { + const resultEvent = this.getResultEvent(event); + + console.time('time:indexer#processEvent-mapping_code'); + // Call subgraph handler for event. + await this._graphWatcher.handleEvent(resultEvent, extraData); + console.timeEnd('time:indexer#processEvent-mapping_code'); + + // Call custom hook function for indexing on event. + await handleEvent(this, resultEvent); + } + + async processEvent (event: Event, extraData: ExtraEventData): Promise { + // Trigger indexing of data based on the event. + await this.triggerIndexingOnEvent(event, extraData); + } + + async processBlock (blockProgress: BlockProgress): Promise { + console.time('time:indexer#processBlock-init_state'); + // Call a function to create initial state for contracts. + await this._baseIndexer.createInit(this, blockProgress.blockHash, blockProgress.blockNumber); + console.timeEnd('time:indexer#processBlock-init_state'); + + this._graphWatcher.updateEntityCacheFrothyBlocks(blockProgress); + } + + async processBlockAfterEvents (blockHash: string, blockNumber: number, extraData: ExtraEventData): Promise { + console.time('time:indexer#processBlockAfterEvents-mapping_code'); + // Call subgraph handler for block. + await this._graphWatcher.handleBlock(blockHash, blockNumber, extraData); + console.timeEnd('time:indexer#processBlockAfterEvents-mapping_code'); + + console.time('time:indexer#processBlockAfterEvents-dump_subgraph_state'); + // Persist subgraph state to the DB. + await this.dumpSubgraphState(blockHash); + console.timeEnd('time:indexer#processBlockAfterEvents-dump_subgraph_state'); + } + + parseEventNameAndArgs (watchedContracts: Contract[], logObj: any): { eventParsed: boolean, eventDetails: any } { + const { topics, data } = logObj; + let logDescription: ethers.utils.LogDescription | undefined; + + for (const watchedContract of watchedContracts) { + const contract = this._contractMap.get(watchedContract.kind); + assert(contract); + + try { + logDescription = contract.parseLog({ data, topics }); + break; + } catch (err) { + // Continue loop only if no matching event found + if (!((err as Error).message.includes('no matching event'))) { + throw err; + } + } + } + + if (!logDescription) { + return { eventParsed: false, eventDetails: {} }; + } + + const { eventName, eventInfo, eventSignature } = this._baseIndexer.parseEvent(logDescription); + + return { + eventParsed: true, + eventDetails: { + eventName, + eventInfo, + eventSignature + } + }; + } + + async getStateSyncStatus (): Promise { + return this._db.getStateSyncStatus(); + } + + async updateStateSyncStatusIndexedBlock (blockNumber: number, force?: boolean): Promise { + if (!this._serverConfig.enableState) { + return; + } + + const dbTx = await this._db.createTransactionRunner(); + let res; + + try { + res = await this._db.updateStateSyncStatusIndexedBlock(dbTx, blockNumber, force); + await dbTx.commitTransaction(); + } catch (error) { + await dbTx.rollbackTransaction(); + throw error; + } finally { + await dbTx.release(); + } + + return res; + } + + async updateStateSyncStatusCheckpointBlock (blockNumber: number, force?: boolean): Promise { + const dbTx = await this._db.createTransactionRunner(); + let res; + + try { + res = await this._db.updateStateSyncStatusCheckpointBlock(dbTx, blockNumber, force); + await dbTx.commitTransaction(); + } catch (error) { + await dbTx.rollbackTransaction(); + throw error; + } finally { + await dbTx.release(); + } + + return res; + } + + async getLatestCanonicalBlock (): Promise { + const syncStatus = await this.getSyncStatus(); + assert(syncStatus); + + if (syncStatus.latestCanonicalBlockHash === constants.HashZero) { + return; + } + + const latestCanonicalBlock = await this.getBlockProgress(syncStatus.latestCanonicalBlockHash); + assert(latestCanonicalBlock); + + return latestCanonicalBlock; + } + + async getLatestStateIndexedBlock (): Promise { + return this._baseIndexer.getLatestStateIndexedBlock(); + } + + async addContracts (): Promise { + // Watching all the contracts in the subgraph. + await this._graphWatcher.addContracts(); + } + + async watchContract (address: string, kind: string, checkpoint: boolean, startingBlock: number, context?: any): Promise { + return this._baseIndexer.watchContract(address, kind, checkpoint, startingBlock, context); + } + + updateStateStatusMap (address: string, stateStatus: StateStatus): void { + this._baseIndexer.updateStateStatusMap(address, stateStatus); + } + + cacheContract (contract: Contract): void { + return this._baseIndexer.cacheContract(contract); + } + + async saveEventEntity (dbEvent: Event): Promise { + return this._baseIndexer.saveEventEntity(dbEvent); + } + + async saveEvents (dbEvents: Event[]): Promise { + return this._baseIndexer.saveEvents(dbEvents); + } + + async getEventsByFilter (blockHash: string, contract?: string, name?: string): Promise> { + return this._baseIndexer.getEventsByFilter(blockHash, contract, name); + } + + isContractAddressWatched (address : string): Contract[] | undefined { + return this._baseIndexer.isContractAddressWatched(address); + } + + getWatchedContracts (): Contract[] { + return this._baseIndexer.getWatchedContracts(); + } + + getContractsByKind (kind: string): Contract[] { + return this._baseIndexer.getContractsByKind(kind); + } + + async getProcessedBlockCountForRange (fromBlockNumber: number, toBlockNumber: number): Promise<{ expected: number, actual: number }> { + return this._baseIndexer.getProcessedBlockCountForRange(fromBlockNumber, toBlockNumber); + } + + async getEventsInRange (fromBlockNumber: number, toBlockNumber: number): Promise> { + return this._baseIndexer.getEventsInRange(fromBlockNumber, toBlockNumber, this._serverConfig.gql.maxEventsBlockRange); + } + + async getEvents (options: FindManyOptions): Promise> { + return this._db.getEvents(options); + } + + async getSyncStatus (): Promise { + return this._baseIndexer.getSyncStatus(); + } + + async getBlocks (blockFilter: { blockHash?: string, blockNumber?: number }): Promise { + return this._baseIndexer.getBlocks(blockFilter); + } + + async getBlockByHash (blockHash?: string): Promise<{ block: any }> { + return this._baseIndexer.getBlockByHash(blockHash); + } + + async updateSyncStatusIndexedBlock (blockHash: string, blockNumber: number, force = false): Promise { + return this._baseIndexer.updateSyncStatusIndexedBlock(blockHash, blockNumber, force); + } + + async updateSyncStatusChainHead (blockHash: string, blockNumber: number, force = false): Promise { + return this._baseIndexer.updateSyncStatusChainHead(blockHash, blockNumber, force); + } + + async updateSyncStatusCanonicalBlock (blockHash: string, blockNumber: number, force = false): Promise { + const syncStatus = this._baseIndexer.updateSyncStatusCanonicalBlock(blockHash, blockNumber, force); + await this.pruneFrothyEntities(blockNumber); + + return syncStatus; + } + + async updateSyncStatusProcessedBlock (blockHash: string, blockNumber: number, force = false): Promise { + return this._baseIndexer.updateSyncStatusProcessedBlock(blockHash, blockNumber, force); + } + + async updateSyncStatusIndexingError (hasIndexingError: boolean): Promise { + return this._baseIndexer.updateSyncStatusIndexingError(hasIndexingError); + } + + async updateSyncStatus (syncStatus: DeepPartial): Promise { + return this._baseIndexer.updateSyncStatus(syncStatus); + } + + async getEvent (id: string): Promise { + return this._baseIndexer.getEvent(id); + } + + async getBlockProgress (blockHash: string): Promise { + return this._baseIndexer.getBlockProgress(blockHash); + } + + async getBlockProgressEntities (where: FindConditions, options: FindManyOptions): Promise { + return this._baseIndexer.getBlockProgressEntities(where, options); + } + + async getBlocksAtHeight (height: number, isPruned: boolean): Promise { + return this._baseIndexer.getBlocksAtHeight(height, isPruned); + } + + async fetchAndSaveFilteredEventsAndBlocks (startBlock: number, endBlock: number): Promise<{ + blockProgress: BlockProgress, + events: DeepPartial[], + ethFullBlock: EthFullBlock; + ethFullTransactions: EthFullTransaction[]; + }[]> { + return this._baseIndexer.fetchAndSaveFilteredEventsAndBlocks(startBlock, endBlock, this.eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); + } + + async fetchEventsForContracts (blockHash: string, blockNumber: number, addresses: string[]): Promise[]> { + return this._baseIndexer.fetchEventsForContracts(blockHash, blockNumber, addresses, this.eventSignaturesMap, this.parseEventNameAndArgs.bind(this)); + } + + async saveBlockAndFetchEvents (block: DeepPartial): Promise<[ + BlockProgress, + DeepPartial[], + EthFullTransaction[] + ]> { + return this._saveBlockAndFetchEvents(block); + } + + async getBlockEvents (blockHash: string, where: Where, queryOptions: QueryOptions): Promise> { + return this._baseIndexer.getBlockEvents(blockHash, where, queryOptions); + } + + async removeUnknownEvents (block: BlockProgress): Promise { + return this._baseIndexer.removeUnknownEvents(Event, block); + } + + async markBlocksAsPruned (blocks: BlockProgress[]): Promise { + await this._baseIndexer.markBlocksAsPruned(blocks); + + await this._graphWatcher.pruneEntities(FrothyEntity, blocks, SUBGRAPH_ENTITIES); + } + + async pruneFrothyEntities (blockNumber: number): Promise { + await this._graphWatcher.pruneFrothyEntities(FrothyEntity, blockNumber); + } + + async resetLatestEntities (blockNumber: number): Promise { + await this._graphWatcher.resetLatestEntities(blockNumber); + } + + async updateBlockProgress (block: BlockProgress, lastProcessedEventIndex: number): Promise { + return this._baseIndexer.updateBlockProgress(block, lastProcessedEventIndex); + } + + async getAncestorAtHeight (blockHash: string, height: number): Promise { + return this._baseIndexer.getAncestorAtHeight(blockHash, height); + } + + async resetWatcherToBlock (blockNumber: number): Promise { + const entities = [...ENTITIES, FrothyEntity]; + await this._baseIndexer.resetWatcherToBlock(blockNumber, entities); + + await this.resetLatestEntities(blockNumber); + } + + async clearProcessedBlockData (block: BlockProgress): Promise { + const entities = [...ENTITIES, FrothyEntity]; + await this._baseIndexer.clearProcessedBlockData(block, entities); + + await this.resetLatestEntities(block.blockNumber); + } + + getEntityTypesMap (): Map { + return this._entityTypesMap; + } + + getRelationsMap (): Map { + return this._relationsMap; + } + + updateSubgraphState (contractAddress: string, data: any): void { + return updateSubgraphState(this._subgraphStateMap, contractAddress, data); + } + + async dumpSubgraphState (blockHash: string, isStateFinalized = false): Promise { + return dumpSubgraphState(this, this._subgraphStateMap, blockHash, isStateFinalized); + } + + _populateEntityTypesMap (): void { + this._entityTypesMap.set('Keeper', { + id: 'ID', + bondHeld: 'BigDecimal', + index: 'BigInt', + status: 'String' + }); + this._entityTypesMap.set('Runner', { + id: 'ID', + bondHeld: 'BigInt', + createdAt: 'BigInt' + }); + this._entityTypesMap.set('QueueTimeline', { + id: 'ID', + keeper: 'Keeper', + timeDelay: 'BigInt', + queued: 'Boolean' + }); + this._entityTypesMap.set('PermissionUpdate', { + id: 'ID', + keeper: 'Keeper', + timeStamp: 'BigInt', + action: 'String' + }); + this._entityTypesMap.set('OrchestratorAction', { + id: 'ID', + timestamp: 'BigInt', + from: 'Keeper', + lastUpdated: 'BigInt', + state: 'String', + status: 'String', + recipients: 'String', + vault: 'String', + transactionHash: 'String', + hash: 'String', + gasUsed: 'BigInt' + }); + this._entityTypesMap.set('Vote', { + id: 'ID', + timestamp: 'BigInt', + by: 'Keeper', + action: 'OrchestratorAction' + }); + this._entityTypesMap.set('ActionFailure', { + id: 'ID', + timeStamp: 'BigInt', + method: 'BigInt', + action: 'OrchestratorAction' + }); + this._entityTypesMap.set('Creator', { + id: 'ID', + revenue: 'BigDecimal', + totalValueLocked: 'BigDecimal', + totalYield: 'BigDecimal' + }); + this._entityTypesMap.set('CreatorWithdrawal', { + id: 'ID', + timeStamp: 'BigInt', + creator: 'Creator', + amount: 'BigDecimal' + }); + this._entityTypesMap.set('Strategy', { + id: 'ID', + name: 'String', + createdAt: 'BigInt', + admin: 'String', + creator: 'Creator', + executionBundle: 'String' + }); + this._entityTypesMap.set('Vault', { + id: 'ID', + deployer: 'String', + token0: 'String', + token1: 'String', + totalAmount0: 'BigDecimal', + totalAmount1: 'BigDecimal', + createdAt: 'BigInt', + lastSnapshot: 'BigInt', + pool: 'String', + state: 'BigInt', + strategyToken: 'Strategy', + annualPercentageYield: 'BigDecimal', + annualPercentageDailyYield: 'BigDecimal', + annualPercentageMonthlyYield: 'BigDecimal', + annualPercentageYearlyYield: 'BigDecimal', + lastTotalT0ValuePerLPT: 'BigDecimal', + accruedStrategistFees0: 'BigInt', + accruedStrategistFees1: 'BigInt', + fees0: 'BigInt', + fees1: 'BigInt', + beaconName: 'String', + gasUsed: 'BigInt', + gasDeposited: 'BigInt', + totalLPTokensIssued: 'BigInt', + token1Symbol: 'String', + decimals: 'BigInt', + feeTier: 'BigInt', + name: 'String', + symbol: 'String', + token0Balance: 'BigInt', + token0Decimals: 'BigInt', + token0Name: 'String', + token0Symbol: 'String', + token1Balance: 'BigInt', + token1Decimals: 'BigInt', + token1Name: 'String', + payloadIpfs: 'String', + vaultManager: 'String', + averageFeeArrPerSecond: 'BigDecimal', + totalSnapshots: 'BigInt', + annualFeeARR: 'BigDecimal', + dailyFeeAPR: 'BigDecimal', + weeklyFeeAPR: 'BigDecimal', + totalValueLockedToken0: 'BigDecimal', + totalValueLockedToken1: 'BigDecimal' + }); + this._entityTypesMap.set('VaultSnapshot', { + id: 'ID', + timestamp: 'BigInt', + vaultAddress: 'Vault', + totalAmount0: 'BigInt', + totalAmount1: 'BigInt', + sqrtPriceX96: 'BigInt', + totalSupply: 'BigInt', + fees1: 'BigInt', + fees0: 'BigInt', + annualFeeAPR: 'BigDecimal', + dailyFeeAPR: 'BigDecimal', + weeklyFeeAPR: 'BigDecimal', + transactionHash: 'String' + }); + this._entityTypesMap.set('PrevVaultSnapshot', { + id: 'ID', + timestamp: 'BigInt', + vaultAddress: 'Vault', + totalAmount0: 'BigInt', + totalAmount1: 'BigInt', + sqrtPriceX96: 'BigInt', + totalSupply: 'BigInt', + fees1: 'BigInt', + fees0: 'BigInt' + }); + this._entityTypesMap.set('PrevDailyVaultSnapshot', { + id: 'ID', + timestamp: 'BigInt', + vaultAddress: 'Vault', + totalAmount0: 'BigInt', + totalAmount1: 'BigInt', + sqrtPriceX96: 'BigInt', + totalSupply: 'BigInt', + fees1: 'BigInt', + fees0: 'BigInt' + }); + this._entityTypesMap.set('PrevMonthlyVaultSnapshot', { + id: 'ID', + timestamp: 'BigInt', + vaultAddress: 'Vault', + totalAmount0: 'BigInt', + totalAmount1: 'BigInt', + sqrtPriceX96: 'BigInt', + totalSupply: 'BigInt', + fees1: 'BigInt', + fees0: 'BigInt' + }); + this._entityTypesMap.set('PrevAnnualVaultSnapshot', { + id: 'ID', + timestamp: 'BigInt', + vaultAddress: 'Vault', + totalAmount0: 'BigInt', + totalAmount1: 'BigInt', + sqrtPriceX96: 'BigInt', + totalSupply: 'BigInt', + fees1: 'BigInt', + fees0: 'BigInt' + }); + this._entityTypesMap.set('PrevWeeklyVaultSnapshot', { + id: 'ID', + timestamp: 'BigInt', + vaultAddress: 'Vault', + totalAmount0: 'BigInt', + totalAmount1: 'BigInt', + sqrtPriceX96: 'BigInt', + totalSupply: 'BigInt', + fees1: 'BigInt', + fees0: 'BigInt', + averageFeeArrPerSecond: 'BigDecimal', + totalSnapshots: 'BigInt', + weeklyFeeApr: 'BigDecimal' + }); + this._entityTypesMap.set('VaultStateChanged', { + id: 'ID', + timeStamp: 'BigInt', + vault: 'Vault', + status: 'BigInt' + }); + this._entityTypesMap.set('VaultDeposit', { + id: 'ID', + vault: 'Vault', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + token0: 'String', + token1: 'String', + sender: 'String', + transactionHash: 'String', + timeStamp: 'BigInt', + shares: 'BigInt', + executor: 'String', + depositCaller: 'String', + blockNumber: 'BigInt' + }); + this._entityTypesMap.set('VaultWithdraw', { + id: 'ID', + vault: 'Vault', + amount0: 'BigDecimal', + amount1: 'BigDecimal', + token0: 'String', + token1: 'String', + timeStamp: 'BigInt', + shares: 'BigInt', + sender: 'String', + transactionHash: 'String', + blockNumber: 'BigInt' + }); + this._entityTypesMap.set('Depositor', { + id: 'ID', + vault: 'Vault', + account: 'String', + executor: 'String', + depositCaller: 'String', + depositedAmount0: 'BigInt', + depositedAmount1: 'BigInt', + withdrawnAmount0: 'BigInt', + withdrawnAmount1: 'BigInt', + liquidityAmount0: 'BigInt', + liquidityAmount1: 'BigInt', + createdTimestamp: 'BigInt', + updatedTimestamp: 'BigInt', + shares: 'BigInt' + }); + this._entityTypesMap.set('VaultBeacon', { + id: 'ID', + address: 'String', + ipfsHash: 'String', + name: 'String', + status: 'String', + timestamp: 'BigInt', + updateTimestamp: 'BigInt' + }); + this._entityTypesMap.set('VaultPosition', { + id: 'ID', + upperTick: 'BigInt', + lowerTick: 'BigInt', + vault: 'Vault', + relativeWeight: 'BigInt', + timestamp: 'BigInt' + }); + this._entityTypesMap.set('LiquiditySteer', { + id: 'ID', + vault: 'Vault', + timeStamp: 'BigInt', + tick: 'BigInt' + }); + this._entityTypesMap.set('OrchestratorReward', { + id: 'ID', + timeStamp: 'BigInt', + updatedTimeStamp: 'BigInt', + address: 'String', + reward: 'BigInt', + trackerId: 'OrchestratorRewardTracker' + }); + this._entityTypesMap.set('OrchestratorRewardTracker', { + id: 'ID', + timeStamp: 'BigInt' + }); + this._entityTypesMap.set('OrchestratorRewardSnapshot', { + id: 'ID', + timeStamp: 'BigInt', + updatedTimeStamp: 'BigInt', + address: 'String', + reward: 'BigInt' + }); + this._entityTypesMap.set('Bundle', { + id: 'ID', + createdAt: 'BigInt', + bundle: 'String', + creator: 'String', + host: 'String', + source: 'String', + output: 'String', + active: 'Boolean', + infoHash: 'String', + hash: 'String' + }); + this._entityTypesMap.set('Job', { + id: 'ID', + name: 'String', + timestamp: 'BigInt', + jobInfo: 'String', + targetAddresses: 'String', + ipfsHash: 'String', + status: 'BigInt', + failedCounts: 'BigInt', + vaultAddress: 'Vault', + jobHash: 'String', + gasUsed: 'BigInt' + }); + this._entityTypesMap.set('JobExecution', { + id: 'ID', + timestamp: 'BigInt', + jobHash: 'String', + executor: 'String', + status: 'String', + jobIdString: 'String', + jobId: 'Job' + }); + this._entityTypesMap.set('JobGasDeposited', { + id: 'ID', + timestamp: 'BigInt', + creator: 'String', + amount: 'BigInt' + }); + this._entityTypesMap.set('JobGasWithdrawn', { + id: 'ID', + timestamp: 'BigInt', + creator: 'String', + amount: 'BigInt' + }); + this._entityTypesMap.set('VaultGasUsed', { + id: 'ID', + timestamp: 'BigInt', + vault: 'String', + actionHash: 'String', + amount: 'BigInt' + }); + this._entityTypesMap.set('VaultGasDeposited', { + id: 'ID', + timestamp: 'BigInt', + vault: 'String', + origin: 'String', + amount: 'BigInt' + }); + this._entityTypesMap.set('VaultGasWithdrawn', { + id: 'ID', + timestamp: 'BigInt', + vault: 'String', + to: 'String', + amount: 'BigInt' + }); + this._entityTypesMap.set('WhiteListManager', { + id: 'ID', + address: 'String', + vault: 'String', + timestamp: 'BigInt' + }); + this._entityTypesMap.set('WhiteListVaultPermission', { + id: 'ID', + manager: 'WhiteListManager', + vault: 'Vault', + addresses: 'String', + timestamp: 'BigInt', + updatedTimestamp: 'BigInt' + }); + this._entityTypesMap.set('LeaderBoard', { + id: 'ID', + address: 'String', + numStaticJobs: 'BigInt', + numApps: 'BigInt', + timestamp: 'BigInt' + }); + this._entityTypesMap.set('VaultTransfer', { + id: 'ID', + from: 'String', + to: 'String', + value: 'BigInt', + timestamp: 'BigInt', + blockNumber: 'BigInt' + }); + } + + // eslint-disable-next-line @typescript-eslint/no-empty-function + _populateRelationsMap (): void { + this._relationsMap.set(Keeper, { + actions: { + entity: OrchestratorAction, + isArray: true, + isDerived: true, + field: 'from' + }, + queueTimeline: { + entity: QueueTimeline, + isArray: true, + isDerived: true, + field: 'keeper' + }, + permissionUpdates: { + entity: PermissionUpdate, + isArray: true, + isDerived: true, + field: 'keeper' + } + }); + this._relationsMap.set(QueueTimeline, { + keeper: { + entity: Keeper, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PermissionUpdate, { + keeper: { + entity: Keeper, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(OrchestratorAction, { + from: { + entity: Keeper, + isArray: false, + isDerived: false + }, + votes: { + entity: Vote, + isArray: true, + isDerived: true, + field: 'action' + }, + actionFailed: { + entity: ActionFailure, + isArray: true, + isDerived: true, + field: 'action' + } + }); + this._relationsMap.set(Vote, { + by: { + entity: Keeper, + isArray: false, + isDerived: false + }, + action: { + entity: OrchestratorAction, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(ActionFailure, { + action: { + entity: OrchestratorAction, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Creator, { + strategies: { + entity: Strategy, + isArray: true, + isDerived: true, + field: 'creator' + }, + withdrawals: { + entity: CreatorWithdrawal, + isArray: true, + isDerived: true, + field: 'creator' + } + }); + this._relationsMap.set(CreatorWithdrawal, { + creator: { + entity: Creator, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Strategy, { + vault: { + entity: Vault, + isArray: true, + isDerived: true, + field: 'strategyToken' + }, + creator: { + entity: Creator, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Vault, { + statusUpdates: { + entity: VaultStateChanged, + isArray: true, + isDerived: true, + field: 'vault' + }, + strategyToken: { + entity: Strategy, + isArray: false, + isDerived: false + }, + snapshots: { + entity: VaultSnapshot, + isArray: true, + isDerived: true, + field: 'vaultAddress' + }, + permissions: { + entity: WhiteListVaultPermission, + isArray: true, + isDerived: true, + field: 'vault' + }, + positions: { + entity: VaultPosition, + isArray: true, + isDerived: true, + field: 'vault' + }, + depositors: { + entity: Depositor, + isArray: true, + isDerived: true, + field: 'vault' + }, + jobs: { + entity: Job, + isArray: true, + isDerived: true, + field: 'vaultAddress' + } + }); + this._relationsMap.set(VaultSnapshot, { + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PrevVaultSnapshot, { + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PrevDailyVaultSnapshot, { + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PrevMonthlyVaultSnapshot, { + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PrevAnnualVaultSnapshot, { + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(PrevWeeklyVaultSnapshot, { + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(VaultStateChanged, { + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(VaultDeposit, { + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(VaultWithdraw, { + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(Depositor, { + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(VaultPosition, { + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(LiquiditySteer, { + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(OrchestratorReward, { + trackerId: { + entity: OrchestratorRewardTracker, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(OrchestratorRewardTracker, { + rewards: { + entity: OrchestratorReward, + isArray: true, + isDerived: true, + field: 'trackerId' + } + }); + this._relationsMap.set(Job, { + executions: { + entity: JobExecution, + isArray: true, + isDerived: true, + field: 'jobId' + }, + vaultAddress: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(JobExecution, { + jobId: { + entity: Job, + isArray: false, + isDerived: false + } + }); + this._relationsMap.set(WhiteListManager, { + permission: { + entity: WhiteListVaultPermission, + isArray: false, + isDerived: true, + field: 'manager' + } + }); + this._relationsMap.set(WhiteListVaultPermission, { + manager: { + entity: WhiteListManager, + isArray: false, + isDerived: false + }, + vault: { + entity: Vault, + isArray: false, + isDerived: false + } + }); + } + + async _saveBlockAndFetchEvents ({ + cid: blockCid, + blockHash, + blockNumber, + blockTimestamp, + parentHash + }: DeepPartial): Promise<[ + BlockProgress, + DeepPartial[], + EthFullTransaction[] + ]> { + assert(blockHash); + assert(blockNumber); + + let dbEvents: DeepPartial[] = []; + let transactions: EthFullTransaction[] = []; + + // Fetch events and txs only if subgraph config has any event handlers + if (this._graphWatcher.eventHandlerExists) { + ({ events: dbEvents, transactions } = await this._baseIndexer.fetchEvents( + blockHash, + blockNumber, + this.eventSignaturesMap, + this.parseEventNameAndArgs.bind(this) + )); + } + + const dbTx = await this._db.createTransactionRunner(); + try { + const block = { + cid: blockCid, + blockHash, + blockNumber, + blockTimestamp, + parentHash + }; + + console.time(`time:indexer#_saveBlockAndFetchEvents-db-save-${blockNumber}`); + const blockProgress = await this._db.saveBlockWithEvents(dbTx, block, dbEvents); + await dbTx.commitTransaction(); + console.timeEnd(`time:indexer#_saveBlockAndFetchEvents-db-save-${blockNumber}`); + + return [blockProgress, [], transactions]; + } catch (error) { + await dbTx.rollbackTransaction(); + throw error; + } finally { + await dbTx.release(); + } + } + + async getFullTransactions (txHashList: string[]): Promise { + return this._baseIndexer.getFullTransactions(txHashList); + } +} diff --git a/src/job-runner.ts b/src/job-runner.ts new file mode 100644 index 0000000..93d6820 --- /dev/null +++ b/src/job-runner.ts @@ -0,0 +1,48 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import debug from 'debug'; + +import { JobRunnerCmd } from '@cerc-io/cli'; +import { JobRunner } from '@cerc-io/util'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { Indexer } from './indexer'; +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from './database'; + +const log = debug('vulcanize:job-runner'); + +export const main = async (): Promise => { + const jobRunnerCmd = new JobRunnerCmd(); + await jobRunnerCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + jobRunnerCmd.config.server, + jobRunnerCmd.clients.ethClient, + jobRunnerCmd.ethProvider, + jobRunnerCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await jobRunnerCmd.initIndexer(Indexer, graphWatcher); + + await jobRunnerCmd.exec(async (jobRunner: JobRunner): Promise => { + await jobRunner.subscribeBlockProcessingQueue(); + await jobRunner.subscribeHistoricalProcessingQueue(); + await jobRunner.subscribeEventProcessingQueue(); + await jobRunner.subscribeBlockCheckpointQueue(); + await jobRunner.subscribeHooksQueue(); + }); +}; + +main().then(() => { + log('Starting job runner...'); +}).catch(err => { + log(err); +}); + +process.on('uncaughtException', err => { + log('uncaughtException', err); +}); diff --git a/src/resolvers.ts b/src/resolvers.ts new file mode 100644 index 0000000..dc14073 --- /dev/null +++ b/src/resolvers.ts @@ -0,0 +1,2074 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import assert from 'assert'; +import debug from 'debug'; +import { GraphQLResolveInfo } from 'graphql'; +import { ExpressContext } from 'apollo-server-express'; +import winston from 'winston'; + +import { + gqlTotalQueryCount, + gqlQueryCount, + gqlQueryDuration, + getResultState, + IndexerInterface, + GraphQLBigInt, + GraphQLBigDecimal, + BlockHeight, + OrderDirection, + jsonBigIntStringReplacer, + EventWatcher, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + setGQLCacheHints +} from '@cerc-io/util'; + +import { Indexer } from './indexer'; + +import { Keeper } from './entity/Keeper'; +import { Runner } from './entity/Runner'; +import { QueueTimeline } from './entity/QueueTimeline'; +import { PermissionUpdate } from './entity/PermissionUpdate'; +import { OrchestratorAction } from './entity/OrchestratorAction'; +import { Vote } from './entity/Vote'; +import { ActionFailure } from './entity/ActionFailure'; +import { Creator } from './entity/Creator'; +import { CreatorWithdrawal } from './entity/CreatorWithdrawal'; +import { Strategy } from './entity/Strategy'; +import { Vault } from './entity/Vault'; +import { VaultSnapshot } from './entity/VaultSnapshot'; +import { PrevVaultSnapshot } from './entity/PrevVaultSnapshot'; +import { PrevDailyVaultSnapshot } from './entity/PrevDailyVaultSnapshot'; +import { PrevMonthlyVaultSnapshot } from './entity/PrevMonthlyVaultSnapshot'; +import { PrevAnnualVaultSnapshot } from './entity/PrevAnnualVaultSnapshot'; +import { PrevWeeklyVaultSnapshot } from './entity/PrevWeeklyVaultSnapshot'; +import { VaultStateChanged } from './entity/VaultStateChanged'; +import { VaultDeposit } from './entity/VaultDeposit'; +import { VaultWithdraw } from './entity/VaultWithdraw'; +import { Depositor } from './entity/Depositor'; +import { VaultBeacon } from './entity/VaultBeacon'; +import { VaultPosition } from './entity/VaultPosition'; +import { LiquiditySteer } from './entity/LiquiditySteer'; +import { OrchestratorReward } from './entity/OrchestratorReward'; +import { OrchestratorRewardTracker } from './entity/OrchestratorRewardTracker'; +import { OrchestratorRewardSnapshot } from './entity/OrchestratorRewardSnapshot'; +import { Bundle } from './entity/Bundle'; +import { Job } from './entity/Job'; +import { JobExecution } from './entity/JobExecution'; +import { JobGasDeposited } from './entity/JobGasDeposited'; +import { JobGasWithdrawn } from './entity/JobGasWithdrawn'; +import { VaultGasUsed } from './entity/VaultGasUsed'; +import { VaultGasDeposited } from './entity/VaultGasDeposited'; +import { VaultGasWithdrawn } from './entity/VaultGasWithdrawn'; +import { WhiteListManager } from './entity/WhiteListManager'; +import { WhiteListVaultPermission } from './entity/WhiteListVaultPermission'; +import { LeaderBoard } from './entity/LeaderBoard'; +import { VaultTransfer } from './entity/VaultTransfer'; + +const log = debug('vulcanize:resolver'); + +const executeAndRecordMetrics = async ( + indexer: Indexer, + gqlLogger: winston.Logger, + opName: string, + expressContext: ExpressContext, + operation: () => Promise +) => { + gqlTotalQueryCount.inc(1); + gqlQueryCount.labels(opName).inc(1); + const endTimer = gqlQueryDuration.labels(opName).startTimer(); + + try { + const [result, syncStatus] = await Promise.all([ + operation(), + indexer.getSyncStatus() + ]); + + gqlLogger.info({ + opName, + query: expressContext.req.body.query, + variables: expressContext.req.body.variables, + latestIndexedBlockNumber: syncStatus?.latestIndexedBlockNumber, + urlPath: expressContext.req.path, + apiKey: expressContext.req.header('x-api-key'), + origin: expressContext.req.headers.origin + }); + return result; + } catch (error) { + gqlLogger.error({ + opName, + error, + query: expressContext.req.body.query, + variables: expressContext.req.body.variables, + urlPath: expressContext.req.path, + apiKey: expressContext.req.header('x-api-key'), + origin: expressContext.req.headers.origin + }); + + throw error; + } finally { + endTimer(); + } +}; + +export const createResolvers = async ( + indexerArg: IndexerInterface, + eventWatcher: EventWatcher, + gqlLogger: winston.Logger +): Promise => { + const indexer = indexerArg as Indexer; + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const gqlCacheConfig = indexer.serverConfig.gql.cache; + + return { + BigInt: GraphQLBigInt, + + BigDecimal: GraphQLBigDecimal, + + Event: { + __resolveType: (obj: any) => { + assert(obj.__typename); + + return obj.__typename; + } + }, + + Subscription: { + onEvent: { + subscribe: () => eventWatcher.getEventIterator() + } + }, + + Mutation: { + watchContract: async (_: any, { address, kind, checkpoint, startingBlock = 1 }: { address: string, kind: string, checkpoint: boolean, startingBlock: number }): Promise => { + log('watchContract', address, kind, checkpoint, startingBlock); + await indexer.watchContract(address, kind, checkpoint, startingBlock); + + return true; + } + }, + + Query: { + keeper: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('keeper', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'keeper', + expressContext, + async () => indexer.getSubgraphEntity(Keeper, id, block, info) + ); + }, + + keepers: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('keepers', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'keepers', + expressContext, + async () => indexer.getSubgraphEntities( + Keeper, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + runner: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('runner', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'runner', + expressContext, + async () => indexer.getSubgraphEntity(Runner, id, block, info) + ); + }, + + runners: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('runners', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'runners', + expressContext, + async () => indexer.getSubgraphEntities( + Runner, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + queueTimeline: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('queueTimeline', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'queueTimeline', + expressContext, + async () => indexer.getSubgraphEntity(QueueTimeline, id, block, info) + ); + }, + + queueTimelines: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('queueTimelines', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'queueTimelines', + expressContext, + async () => indexer.getSubgraphEntities( + QueueTimeline, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + permissionUpdate: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('permissionUpdate', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'permissionUpdate', + expressContext, + async () => indexer.getSubgraphEntity(PermissionUpdate, id, block, info) + ); + }, + + permissionUpdates: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('permissionUpdates', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'permissionUpdates', + expressContext, + async () => indexer.getSubgraphEntities( + PermissionUpdate, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + orchestratorAction: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorAction', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorAction', + expressContext, + async () => indexer.getSubgraphEntity(OrchestratorAction, id, block, info) + ); + }, + + orchestratorActions: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorActions', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorActions', + expressContext, + async () => indexer.getSubgraphEntities( + OrchestratorAction, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vote: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vote', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vote', + expressContext, + async () => indexer.getSubgraphEntity(Vote, id, block, info) + ); + }, + + votes: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('votes', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'votes', + expressContext, + async () => indexer.getSubgraphEntities( + Vote, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + actionFailure: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('actionFailure', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'actionFailure', + expressContext, + async () => indexer.getSubgraphEntity(ActionFailure, id, block, info) + ); + }, + + actionFailures: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('actionFailures', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'actionFailures', + expressContext, + async () => indexer.getSubgraphEntities( + ActionFailure, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + creator: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('creator', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'creator', + expressContext, + async () => indexer.getSubgraphEntity(Creator, id, block, info) + ); + }, + + creators: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('creators', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'creators', + expressContext, + async () => indexer.getSubgraphEntities( + Creator, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + creatorWithdrawal: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('creatorWithdrawal', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'creatorWithdrawal', + expressContext, + async () => indexer.getSubgraphEntity(CreatorWithdrawal, id, block, info) + ); + }, + + creatorWithdrawals: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('creatorWithdrawals', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'creatorWithdrawals', + expressContext, + async () => indexer.getSubgraphEntities( + CreatorWithdrawal, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + strategy: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('strategy', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'strategy', + expressContext, + async () => indexer.getSubgraphEntity(Strategy, id, block, info) + ); + }, + + strategies: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('strategies', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'strategies', + expressContext, + async () => indexer.getSubgraphEntities( + Strategy, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vault: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vault', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vault', + expressContext, + async () => indexer.getSubgraphEntity(Vault, id, block, info) + ); + }, + + vaults: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaults', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaults', + expressContext, + async () => indexer.getSubgraphEntities( + Vault, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(VaultSnapshot, id, block, info) + ); + }, + + vaultSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + VaultSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + prevVaultSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevVaultSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevVaultSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(PrevVaultSnapshot, id, block, info) + ); + }, + + prevVaultSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevVaultSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevVaultSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + PrevVaultSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + prevDailyVaultSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevDailyVaultSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevDailyVaultSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(PrevDailyVaultSnapshot, id, block, info) + ); + }, + + prevDailyVaultSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevDailyVaultSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevDailyVaultSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + PrevDailyVaultSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + prevMonthlyVaultSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevMonthlyVaultSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevMonthlyVaultSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(PrevMonthlyVaultSnapshot, id, block, info) + ); + }, + + prevMonthlyVaultSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevMonthlyVaultSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevMonthlyVaultSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + PrevMonthlyVaultSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + prevAnnualVaultSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevAnnualVaultSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevAnnualVaultSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(PrevAnnualVaultSnapshot, id, block, info) + ); + }, + + prevAnnualVaultSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevAnnualVaultSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevAnnualVaultSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + PrevAnnualVaultSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + prevWeeklyVaultSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevWeeklyVaultSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevWeeklyVaultSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(PrevWeeklyVaultSnapshot, id, block, info) + ); + }, + + prevWeeklyVaultSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('prevWeeklyVaultSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'prevWeeklyVaultSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + PrevWeeklyVaultSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultStateChanged: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultStateChanged', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultStateChanged', + expressContext, + async () => indexer.getSubgraphEntity(VaultStateChanged, id, block, info) + ); + }, + + vaultStateChangeds: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultStateChangeds', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultStateChangeds', + expressContext, + async () => indexer.getSubgraphEntities( + VaultStateChanged, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultDeposit: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultDeposit', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultDeposit', + expressContext, + async () => indexer.getSubgraphEntity(VaultDeposit, id, block, info) + ); + }, + + vaultDeposits: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultDeposits', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultDeposits', + expressContext, + async () => indexer.getSubgraphEntities( + VaultDeposit, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultWithdraw: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultWithdraw', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultWithdraw', + expressContext, + async () => indexer.getSubgraphEntity(VaultWithdraw, id, block, info) + ); + }, + + vaultWithdraws: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultWithdraws', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultWithdraws', + expressContext, + async () => indexer.getSubgraphEntities( + VaultWithdraw, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + depositor: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('depositor', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'depositor', + expressContext, + async () => indexer.getSubgraphEntity(Depositor, id, block, info) + ); + }, + + depositors: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('depositors', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'depositors', + expressContext, + async () => indexer.getSubgraphEntities( + Depositor, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultBeacon: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultBeacon', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultBeacon', + expressContext, + async () => indexer.getSubgraphEntity(VaultBeacon, id, block, info) + ); + }, + + vaultBeacons: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultBeacons', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultBeacons', + expressContext, + async () => indexer.getSubgraphEntities( + VaultBeacon, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultPosition: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultPosition', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultPosition', + expressContext, + async () => indexer.getSubgraphEntity(VaultPosition, id, block, info) + ); + }, + + vaultPositions: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultPositions', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultPositions', + expressContext, + async () => indexer.getSubgraphEntities( + VaultPosition, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + liquiditySteer: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('liquiditySteer', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'liquiditySteer', + expressContext, + async () => indexer.getSubgraphEntity(LiquiditySteer, id, block, info) + ); + }, + + liquiditySteers: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('liquiditySteers', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'liquiditySteers', + expressContext, + async () => indexer.getSubgraphEntities( + LiquiditySteer, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + orchestratorReward: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorReward', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorReward', + expressContext, + async () => indexer.getSubgraphEntity(OrchestratorReward, id, block, info) + ); + }, + + orchestratorRewards: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorRewards', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorRewards', + expressContext, + async () => indexer.getSubgraphEntities( + OrchestratorReward, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + orchestratorRewardTracker: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorRewardTracker', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorRewardTracker', + expressContext, + async () => indexer.getSubgraphEntity(OrchestratorRewardTracker, id, block, info) + ); + }, + + orchestratorRewardTrackers: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorRewardTrackers', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorRewardTrackers', + expressContext, + async () => indexer.getSubgraphEntities( + OrchestratorRewardTracker, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + orchestratorRewardSnapshot: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorRewardSnapshot', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorRewardSnapshot', + expressContext, + async () => indexer.getSubgraphEntity(OrchestratorRewardSnapshot, id, block, info) + ); + }, + + orchestratorRewardSnapshots: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('orchestratorRewardSnapshots', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'orchestratorRewardSnapshots', + expressContext, + async () => indexer.getSubgraphEntities( + OrchestratorRewardSnapshot, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + bundle: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('bundle', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'bundle', + expressContext, + async () => indexer.getSubgraphEntity(Bundle, id, block, info) + ); + }, + + bundles: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('bundles', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'bundles', + expressContext, + async () => indexer.getSubgraphEntities( + Bundle, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + job: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('job', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'job', + expressContext, + async () => indexer.getSubgraphEntity(Job, id, block, info) + ); + }, + + jobs: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobs', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobs', + expressContext, + async () => indexer.getSubgraphEntities( + Job, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + jobExecution: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobExecution', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobExecution', + expressContext, + async () => indexer.getSubgraphEntity(JobExecution, id, block, info) + ); + }, + + jobExecutions: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobExecutions', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobExecutions', + expressContext, + async () => indexer.getSubgraphEntities( + JobExecution, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + jobGasDeposited: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobGasDeposited', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobGasDeposited', + expressContext, + async () => indexer.getSubgraphEntity(JobGasDeposited, id, block, info) + ); + }, + + jobGasDepositeds: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobGasDepositeds', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobGasDepositeds', + expressContext, + async () => indexer.getSubgraphEntities( + JobGasDeposited, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + jobGasWithdrawn: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobGasWithdrawn', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobGasWithdrawn', + expressContext, + async () => indexer.getSubgraphEntity(JobGasWithdrawn, id, block, info) + ); + }, + + jobGasWithdrawns: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('jobGasWithdrawns', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'jobGasWithdrawns', + expressContext, + async () => indexer.getSubgraphEntities( + JobGasWithdrawn, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultGasUsed: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultGasUsed', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultGasUsed', + expressContext, + async () => indexer.getSubgraphEntity(VaultGasUsed, id, block, info) + ); + }, + + vaultGasUseds: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultGasUseds', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultGasUseds', + expressContext, + async () => indexer.getSubgraphEntities( + VaultGasUsed, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultGasDeposited: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultGasDeposited', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultGasDeposited', + expressContext, + async () => indexer.getSubgraphEntity(VaultGasDeposited, id, block, info) + ); + }, + + vaultGasDepositeds: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultGasDepositeds', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultGasDepositeds', + expressContext, + async () => indexer.getSubgraphEntities( + VaultGasDeposited, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultGasWithdrawn: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultGasWithdrawn', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultGasWithdrawn', + expressContext, + async () => indexer.getSubgraphEntity(VaultGasWithdrawn, id, block, info) + ); + }, + + vaultGasWithdrawns: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultGasWithdrawns', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultGasWithdrawns', + expressContext, + async () => indexer.getSubgraphEntities( + VaultGasWithdrawn, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + whiteListManager: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('whiteListManager', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'whiteListManager', + expressContext, + async () => indexer.getSubgraphEntity(WhiteListManager, id, block, info) + ); + }, + + whiteListManagers: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('whiteListManagers', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'whiteListManagers', + expressContext, + async () => indexer.getSubgraphEntities( + WhiteListManager, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + whiteListVaultPermission: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('whiteListVaultPermission', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'whiteListVaultPermission', + expressContext, + async () => indexer.getSubgraphEntity(WhiteListVaultPermission, id, block, info) + ); + }, + + whiteListVaultPermissions: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('whiteListVaultPermissions', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'whiteListVaultPermissions', + expressContext, + async () => indexer.getSubgraphEntities( + WhiteListVaultPermission, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + leaderBoard: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('leaderBoard', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'leaderBoard', + expressContext, + async () => indexer.getSubgraphEntity(LeaderBoard, id, block, info) + ); + }, + + leaderBoards: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('leaderBoards', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'leaderBoards', + expressContext, + async () => indexer.getSubgraphEntities( + LeaderBoard, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + vaultTransfer: async ( + _: any, + { id, block = {} }: { id: string, block: BlockHeight }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultTransfer', id, JSON.stringify(block, jsonBigIntStringReplacer)); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultTransfer', + expressContext, + async () => indexer.getSubgraphEntity(VaultTransfer, id, block, info) + ); + }, + + vaultTransfers: async ( + _: any, + { block = {}, where, first, skip, orderBy, orderDirection }: { block: BlockHeight, where: { [key: string]: any }, first: number, skip: number, orderBy: string, orderDirection: OrderDirection }, + expressContext: ExpressContext, + info: GraphQLResolveInfo + ) => { + log('vaultTransfers', JSON.stringify(block, jsonBigIntStringReplacer), JSON.stringify(where, jsonBigIntStringReplacer), first, skip, orderBy, orderDirection); + + // Set cache-control hints + // setGQLCacheHints(info, block, gqlCacheConfig); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'vaultTransfers', + expressContext, + async () => indexer.getSubgraphEntities( + VaultTransfer, + block, + where, + { limit: first, skip, orderBy, orderDirection }, + info + ) + ); + }, + + events: async ( + _: any, + { blockHash, contractAddress, name }: { blockHash: string, contractAddress: string, name?: string }, + expressContext: ExpressContext + ) => { + log('events', blockHash, contractAddress, name); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'events', + expressContext, + async () => { + const block = await indexer.getBlockProgress(blockHash); + if (!block || !block.isComplete) { + throw new Error(`Block hash ${blockHash} number ${block?.blockNumber} not processed yet`); + } + + const events = await indexer.getEventsByFilter(blockHash, contractAddress, name); + return events.map(event => indexer.getResultEvent(event)); + } + ); + }, + + eventsInRange: async ( + _: any, + { fromBlockNumber, toBlockNumber }: { fromBlockNumber: number, toBlockNumber: number }, + expressContext: ExpressContext + ) => { + log('eventsInRange', fromBlockNumber, toBlockNumber); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'eventsInRange', + expressContext, + async () => { + const syncStatus = await indexer.getSyncStatus(); + + if (!syncStatus) { + throw new Error('No blocks processed yet'); + } + + if ((fromBlockNumber < syncStatus.initialIndexedBlockNumber) || (toBlockNumber > syncStatus.latestProcessedBlockNumber)) { + throw new Error(`Block range should be between ${syncStatus.initialIndexedBlockNumber} and ${syncStatus.latestProcessedBlockNumber}`); + } + + const events = await indexer.getEventsInRange(fromBlockNumber, toBlockNumber); + return events.map(event => indexer.getResultEvent(event)); + } + ); + }, + + getStateByCID: async ( + _: any, + { cid }: { cid: string }, + expressContext: ExpressContext + ) => { + log('getStateByCID', cid); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'getStateByCID', + expressContext, + async () => { + const state = await indexer.getStateByCID(cid); + + return state && state.block.isComplete ? getResultState(state) : undefined; + } + ); + }, + + getState: async ( + _: any, + { blockHash, contractAddress, kind }: { blockHash: string, contractAddress: string, kind: string }, + expressContext: ExpressContext + ) => { + log('getState', blockHash, contractAddress, kind); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'getState', + expressContext, + async () => { + const state = await indexer.getPrevState(blockHash, contractAddress, kind); + + return state && state.block.isComplete ? getResultState(state) : undefined; + } + ); + }, + + _meta: async ( + _: any, + { block = {} }: { block: BlockHeight }, + expressContext: ExpressContext + ) => { + log('_meta'); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + '_meta', + expressContext, + async () => indexer.getMetaData(block) + ); + }, + + getSyncStatus: async ( + _: any, + __: Record, + expressContext: ExpressContext + ) => { + log('getSyncStatus'); + + return executeAndRecordMetrics( + indexer, + gqlLogger, + 'getSyncStatus', + expressContext, + async () => indexer.getSyncStatus() + ); + } + } + }; +}; diff --git a/src/schema.gql b/src/schema.gql new file mode 100644 index 0000000..2c0c984 --- /dev/null +++ b/src/schema.gql @@ -0,0 +1,5784 @@ +directive @cacheControl(maxAge: Int, inheritMaxAge: Boolean, scope: CacheControlScope) on FIELD_DEFINITION | OBJECT | INTERFACE | UNION + +enum CacheControlScope { + PUBLIC + PRIVATE +} + +scalar BigInt + +scalar BigDecimal + +scalar Bytes + +type Proof { + data: String! +} + +type _Block_ { + cid: String + hash: String! + number: Int! + timestamp: Int! + parentHash: String! +} + +type _Transaction_ { + hash: String! + index: Int! + from: String! + to: String! +} + +type ResultEvent { + block: _Block_! + tx: _Transaction_! + contract: String! + eventIndex: Int! + event: Event! + proof: Proof +} + +union Event = AdminChangedEvent | UpgradedEvent | BeaconUpgradedEvent | LeaveQueuedEvent | OwnershipTransferredEvent | PermissionChangedEvent | ActionExecutedEvent | ActionFailedEvent | VoteEvent | ApprovalEvent | ApprovalForAllEvent | PausedEvent | RoleAdminChangedEvent | RoleGrantedEvent | RoleRevokedEvent | StrategyCreatedEvent | TransferEvent | UnpausedEvent | BeaconConfigUpdatedEvent | BeaconDeregisteredEvent | BeaconRegisteredEvent | VaultCreatedEvent | VaultStateChangedEvent | BundleRegisteredEvent | BundleStateChangeEvent | DepositedEvent | EtherUsedEvent | WithdrawnEvent | ManagerAddedEvent | PermissionsAddedEvent | PermissionsRemovedEvent | DepositEvent | FeesEarnedEvent | SnapshotEvent | WithdrawEvent | JobExecutedEvent | JobRegisteredEvent | JobToggledByCreatorEvent + +type AdminChangedEvent { + previousAdmin: String! + newAdmin: String! +} + +type UpgradedEvent { + implementation: String! +} + +type BeaconUpgradedEvent { + beacon: String! +} + +type LeaveQueuedEvent { + keeper: String! + leaveTimestamp: BigInt! +} + +type OwnershipTransferredEvent { + previousOwner: String! + newOwner: String! +} + +type PermissionChangedEvent { + _subject: String! + _permissionType: Int! +} + +type ActionExecutedEvent { + actionHash: String! + from: String! + rewardPerAction: BigInt! +} + +type ActionFailedEvent { + actionHash: String! +} + +type VoteEvent { + actionHash: String! + from: String! + approved: Boolean! +} + +type ApprovalEvent { + owner: String! + approved: String + tokenId: BigInt + spender: String + value: BigInt +} + +type ApprovalForAllEvent { + owner: String! + operator: String! + approved: Boolean! +} + +type PausedEvent { + account: String! +} + +type RoleAdminChangedEvent { + role: String! + previousAdminRole: String! + newAdminRole: String! +} + +type RoleGrantedEvent { + role: String! + account: String! + sender: String! +} + +type RoleRevokedEvent { + role: String! + account: String! + sender: String! +} + +type StrategyCreatedEvent { + owner: String! + tokenId: BigInt! + name: String! +} + +type TransferEvent { + from: String! + to: String! + tokenId: BigInt + value: BigInt +} + +type UnpausedEvent { + account: String! +} + +type BeaconConfigUpdatedEvent { + _name: String! + _ipfsHash: String! +} + +type BeaconDeregisteredEvent { + _name: String! +} + +type BeaconRegisteredEvent { + _name: String! + _address: String! + _ipfsHash: String! +} + +type VaultCreatedEvent { + deployer: String! + vault: String! + beaconName: String! + tokenId: BigInt! + vaultManager: String! +} + +type VaultStateChangedEvent { + vault: String! + newState: Int! +} + +type BundleRegisteredEvent { + hash: String! + bundle: String! + host: String! + source: String! + output: String! + infoHash: String! + active: Boolean! + creator: String! +} + +type BundleStateChangeEvent { + hash: String! + toggle: Boolean! +} + +type DepositedEvent { + origin: String! + target: String! + amount: BigInt! +} + +type EtherUsedEvent { + account: String! + amount: BigInt! + jobHash: String! +} + +type WithdrawnEvent { + targetAddress: String! + to: String! + amount: BigInt! +} + +type ManagerAddedEvent { + vaultAddress: String! + manager: String! +} + +type PermissionsAddedEvent { + whitelistManager: String! + vault: String! + addressesAdded: [String!] +} + +type PermissionsRemovedEvent { + whitelistManager: String! + vault: String! + addressesRemoved: [String!] +} + +type DepositEvent { + sender: String! + to: String! + shares: BigInt! + amount0: BigInt! + amount1: BigInt! +} + +type FeesEarnedEvent { + amount0Earned: BigInt! + amount1Earned: BigInt! +} + +type SnapshotEvent { + sqrtPriceX96: BigInt! + totalAmount0: BigInt! + totalAmount1: BigInt! + totalSupply: BigInt! +} + +type WithdrawEvent { + sender: String! + to: String! + shares: BigInt! + amount0: BigInt! + amount1: BigInt! +} + +type JobExecutedEvent { + jobHash: String! + executor: String! +} + +type JobRegisteredEvent { + jobInfo: [String!] + targetAddresses: [String!] + jobHash: String! + name: String! + ipfsForJobDetails: String! +} + +type JobToggledByCreatorEvent { + jobHash: String! + toggle: BigInt! +} + +input Block_height { + hash: Bytes + number: Int +} + +input BlockChangedFilter { + number_gte: Int! +} + +enum OrderDirection { + asc + desc +} + +enum Keeper_orderBy { + id + bondHeld + index + actions + status + queueTimeline + permissionUpdates +} + +input Keeper_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + bondHeld: BigDecimal + bondHeld_not: BigDecimal + bondHeld_gt: BigDecimal + bondHeld_lt: BigDecimal + bondHeld_gte: BigDecimal + bondHeld_lte: BigDecimal + bondHeld_in: [BigDecimal!] + bondHeld_not_in: [BigDecimal!] + index: BigInt + index_not: BigInt + index_gt: BigInt + index_lt: BigInt + index_gte: BigInt + index_lte: BigInt + index_in: [BigInt!] + index_not_in: [BigInt!] + actions_: OrchestratorAction_filter + status: String + status_not: String + status_gt: String + status_lt: String + status_gte: String + status_lte: String + status_in: [String!] + status_not_in: [String!] + status_starts_with: String + status_starts_with_nocase: String + status_not_starts_with: String + status_not_starts_with_nocase: String + status_ends_with: String + status_ends_with_nocase: String + status_not_ends_with: String + status_not_ends_with_nocase: String + status_contains: String + status_not_contains: String + status_contains_nocase: String + status_not_contains_nocase: String + queueTimeline_: QueueTimeline_filter + permissionUpdates_: PermissionUpdate_filter + _change_block: BlockChangedFilter + and: [Keeper_filter] + or: [Keeper_filter] +} + +enum Runner_orderBy { + id + bondHeld + createdAt +} + +input Runner_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + bondHeld: BigInt + bondHeld_not: BigInt + bondHeld_gt: BigInt + bondHeld_lt: BigInt + bondHeld_gte: BigInt + bondHeld_lte: BigInt + bondHeld_in: [BigInt!] + bondHeld_not_in: [BigInt!] + createdAt: BigInt + createdAt_not: BigInt + createdAt_gt: BigInt + createdAt_lt: BigInt + createdAt_gte: BigInt + createdAt_lte: BigInt + createdAt_in: [BigInt!] + createdAt_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Runner_filter] + or: [Runner_filter] +} + +enum QueueTimeline_orderBy { + id + keeper + keeper__id + keeper__bondHeld + keeper__index + keeper__status + timeDelay + queued +} + +input QueueTimeline_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + keeper: String + keeper_not: String + keeper_gt: String + keeper_lt: String + keeper_gte: String + keeper_lte: String + keeper_in: [String!] + keeper_not_in: [String!] + keeper_starts_with: String + keeper_starts_with_nocase: String + keeper_not_starts_with: String + keeper_not_starts_with_nocase: String + keeper_ends_with: String + keeper_ends_with_nocase: String + keeper_not_ends_with: String + keeper_not_ends_with_nocase: String + keeper_contains: String + keeper_not_contains: String + keeper_contains_nocase: String + keeper_not_contains_nocase: String + keeper_: Keeper_filter + timeDelay: BigInt + timeDelay_not: BigInt + timeDelay_gt: BigInt + timeDelay_lt: BigInt + timeDelay_gte: BigInt + timeDelay_lte: BigInt + timeDelay_in: [BigInt!] + timeDelay_not_in: [BigInt!] + queued: Boolean + queued_not: Boolean + queued_gt: Boolean + queued_lt: Boolean + queued_gte: Boolean + queued_lte: Boolean + queued_in: [Boolean!] + queued_not_in: [Boolean!] + _change_block: BlockChangedFilter + and: [QueueTimeline_filter] + or: [QueueTimeline_filter] +} + +enum PermissionUpdate_orderBy { + id + keeper + keeper__id + keeper__bondHeld + keeper__index + keeper__status + timeStamp + action +} + +input PermissionUpdate_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + keeper: String + keeper_not: String + keeper_gt: String + keeper_lt: String + keeper_gte: String + keeper_lte: String + keeper_in: [String!] + keeper_not_in: [String!] + keeper_starts_with: String + keeper_starts_with_nocase: String + keeper_not_starts_with: String + keeper_not_starts_with_nocase: String + keeper_ends_with: String + keeper_ends_with_nocase: String + keeper_not_ends_with: String + keeper_not_ends_with_nocase: String + keeper_contains: String + keeper_not_contains: String + keeper_contains_nocase: String + keeper_not_contains_nocase: String + keeper_: Keeper_filter + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + action: String + action_not: String + action_gt: String + action_lt: String + action_gte: String + action_lte: String + action_in: [String!] + action_not_in: [String!] + action_starts_with: String + action_starts_with_nocase: String + action_not_starts_with: String + action_not_starts_with_nocase: String + action_ends_with: String + action_ends_with_nocase: String + action_not_ends_with: String + action_not_ends_with_nocase: String + action_contains: String + action_not_contains: String + action_contains_nocase: String + action_not_contains_nocase: String + _change_block: BlockChangedFilter + and: [PermissionUpdate_filter] + or: [PermissionUpdate_filter] +} + +enum OrchestratorAction_orderBy { + id + timestamp + from + from__id + from__bondHeld + from__index + from__status + votes + lastUpdated + state + status + recipients + actionFailed + vault + transactionHash + hash + gasUsed +} + +input OrchestratorAction_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + from: String + from_not: String + from_gt: String + from_lt: String + from_gte: String + from_lte: String + from_in: [String!] + from_not_in: [String!] + from_starts_with: String + from_starts_with_nocase: String + from_not_starts_with: String + from_not_starts_with_nocase: String + from_ends_with: String + from_ends_with_nocase: String + from_not_ends_with: String + from_not_ends_with_nocase: String + from_contains: String + from_not_contains: String + from_contains_nocase: String + from_not_contains_nocase: String + from_: Keeper_filter + votes_: Vote_filter + lastUpdated: BigInt + lastUpdated_not: BigInt + lastUpdated_gt: BigInt + lastUpdated_lt: BigInt + lastUpdated_gte: BigInt + lastUpdated_lte: BigInt + lastUpdated_in: [BigInt!] + lastUpdated_not_in: [BigInt!] + state: String + state_not: String + state_gt: String + state_lt: String + state_gte: String + state_lte: String + state_in: [String!] + state_not_in: [String!] + state_starts_with: String + state_starts_with_nocase: String + state_not_starts_with: String + state_not_starts_with_nocase: String + state_ends_with: String + state_ends_with_nocase: String + state_not_ends_with: String + state_not_ends_with_nocase: String + state_contains: String + state_not_contains: String + state_contains_nocase: String + state_not_contains_nocase: String + status: String + status_not: String + status_gt: String + status_lt: String + status_gte: String + status_lte: String + status_in: [String!] + status_not_in: [String!] + status_starts_with: String + status_starts_with_nocase: String + status_not_starts_with: String + status_not_starts_with_nocase: String + status_ends_with: String + status_ends_with_nocase: String + status_not_ends_with: String + status_not_ends_with_nocase: String + status_contains: String + status_not_contains: String + status_contains_nocase: String + status_not_contains_nocase: String + recipients: [String!] + recipients_not: [String!] + recipients_contains: [String!] + recipients_not_contains: [String!] + recipients_contains_nocase: [String!] + recipients_not_contains_nocase: [String!] + actionFailed_: ActionFailure_filter + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + transactionHash: String + transactionHash_not: String + transactionHash_gt: String + transactionHash_lt: String + transactionHash_gte: String + transactionHash_lte: String + transactionHash_in: [String!] + transactionHash_not_in: [String!] + transactionHash_starts_with: String + transactionHash_starts_with_nocase: String + transactionHash_not_starts_with: String + transactionHash_not_starts_with_nocase: String + transactionHash_ends_with: String + transactionHash_ends_with_nocase: String + transactionHash_not_ends_with: String + transactionHash_not_ends_with_nocase: String + transactionHash_contains: String + transactionHash_not_contains: String + transactionHash_contains_nocase: String + transactionHash_not_contains_nocase: String + hash: String + hash_not: String + hash_gt: String + hash_lt: String + hash_gte: String + hash_lte: String + hash_in: [String!] + hash_not_in: [String!] + hash_starts_with: String + hash_starts_with_nocase: String + hash_not_starts_with: String + hash_not_starts_with_nocase: String + hash_ends_with: String + hash_ends_with_nocase: String + hash_not_ends_with: String + hash_not_ends_with_nocase: String + hash_contains: String + hash_not_contains: String + hash_contains_nocase: String + hash_not_contains_nocase: String + gasUsed: BigInt + gasUsed_not: BigInt + gasUsed_gt: BigInt + gasUsed_lt: BigInt + gasUsed_gte: BigInt + gasUsed_lte: BigInt + gasUsed_in: [BigInt!] + gasUsed_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [OrchestratorAction_filter] + or: [OrchestratorAction_filter] +} + +enum Vote_orderBy { + id + timestamp + by + by__id + by__bondHeld + by__index + by__status + action + action__id + action__timestamp + action__lastUpdated + action__state + action__status + action__vault + action__transactionHash + action__hash + action__gasUsed +} + +input Vote_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + by: String + by_not: String + by_gt: String + by_lt: String + by_gte: String + by_lte: String + by_in: [String!] + by_not_in: [String!] + by_starts_with: String + by_starts_with_nocase: String + by_not_starts_with: String + by_not_starts_with_nocase: String + by_ends_with: String + by_ends_with_nocase: String + by_not_ends_with: String + by_not_ends_with_nocase: String + by_contains: String + by_not_contains: String + by_contains_nocase: String + by_not_contains_nocase: String + by_: Keeper_filter + action: String + action_not: String + action_gt: String + action_lt: String + action_gte: String + action_lte: String + action_in: [String!] + action_not_in: [String!] + action_starts_with: String + action_starts_with_nocase: String + action_not_starts_with: String + action_not_starts_with_nocase: String + action_ends_with: String + action_ends_with_nocase: String + action_not_ends_with: String + action_not_ends_with_nocase: String + action_contains: String + action_not_contains: String + action_contains_nocase: String + action_not_contains_nocase: String + action_: OrchestratorAction_filter + _change_block: BlockChangedFilter + and: [Vote_filter] + or: [Vote_filter] +} + +enum ActionFailure_orderBy { + id + timeStamp + method + action + action__id + action__timestamp + action__lastUpdated + action__state + action__status + action__vault + action__transactionHash + action__hash + action__gasUsed +} + +input ActionFailure_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + method: BigInt + method_not: BigInt + method_gt: BigInt + method_lt: BigInt + method_gte: BigInt + method_lte: BigInt + method_in: [BigInt!] + method_not_in: [BigInt!] + action: String + action_not: String + action_gt: String + action_lt: String + action_gte: String + action_lte: String + action_in: [String!] + action_not_in: [String!] + action_starts_with: String + action_starts_with_nocase: String + action_not_starts_with: String + action_not_starts_with_nocase: String + action_ends_with: String + action_ends_with_nocase: String + action_not_ends_with: String + action_not_ends_with_nocase: String + action_contains: String + action_not_contains: String + action_contains_nocase: String + action_not_contains_nocase: String + action_: OrchestratorAction_filter + _change_block: BlockChangedFilter + and: [ActionFailure_filter] + or: [ActionFailure_filter] +} + +enum Creator_orderBy { + id + strategies + revenue + withdrawals + totalValueLocked + totalYield +} + +input Creator_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + strategies_: Strategy_filter + revenue: BigDecimal + revenue_not: BigDecimal + revenue_gt: BigDecimal + revenue_lt: BigDecimal + revenue_gte: BigDecimal + revenue_lte: BigDecimal + revenue_in: [BigDecimal!] + revenue_not_in: [BigDecimal!] + withdrawals_: CreatorWithdrawal_filter + totalValueLocked: BigDecimal + totalValueLocked_not: BigDecimal + totalValueLocked_gt: BigDecimal + totalValueLocked_lt: BigDecimal + totalValueLocked_gte: BigDecimal + totalValueLocked_lte: BigDecimal + totalValueLocked_in: [BigDecimal!] + totalValueLocked_not_in: [BigDecimal!] + totalYield: BigDecimal + totalYield_not: BigDecimal + totalYield_gt: BigDecimal + totalYield_lt: BigDecimal + totalYield_gte: BigDecimal + totalYield_lte: BigDecimal + totalYield_in: [BigDecimal!] + totalYield_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [Creator_filter] + or: [Creator_filter] +} + +enum CreatorWithdrawal_orderBy { + id + timeStamp + creator + creator__id + creator__revenue + creator__totalValueLocked + creator__totalYield + amount +} + +input CreatorWithdrawal_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + creator: String + creator_not: String + creator_gt: String + creator_lt: String + creator_gte: String + creator_lte: String + creator_in: [String!] + creator_not_in: [String!] + creator_starts_with: String + creator_starts_with_nocase: String + creator_not_starts_with: String + creator_not_starts_with_nocase: String + creator_ends_with: String + creator_ends_with_nocase: String + creator_not_ends_with: String + creator_not_ends_with_nocase: String + creator_contains: String + creator_not_contains: String + creator_contains_nocase: String + creator_not_contains_nocase: String + creator_: Creator_filter + amount: BigDecimal + amount_not: BigDecimal + amount_gt: BigDecimal + amount_lt: BigDecimal + amount_gte: BigDecimal + amount_lte: BigDecimal + amount_in: [BigDecimal!] + amount_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [CreatorWithdrawal_filter] + or: [CreatorWithdrawal_filter] +} + +enum Strategy_orderBy { + id + name + vault + createdAt + admin + creator + creator__id + creator__revenue + creator__totalValueLocked + creator__totalYield + executionBundle +} + +input Strategy_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + name_contains: String + name_not_contains: String + name_contains_nocase: String + name_not_contains_nocase: String + vault_: Vault_filter + createdAt: BigInt + createdAt_not: BigInt + createdAt_gt: BigInt + createdAt_lt: BigInt + createdAt_gte: BigInt + createdAt_lte: BigInt + createdAt_in: [BigInt!] + createdAt_not_in: [BigInt!] + admin: String + admin_not: String + admin_gt: String + admin_lt: String + admin_gte: String + admin_lte: String + admin_in: [String!] + admin_not_in: [String!] + admin_starts_with: String + admin_starts_with_nocase: String + admin_not_starts_with: String + admin_not_starts_with_nocase: String + admin_ends_with: String + admin_ends_with_nocase: String + admin_not_ends_with: String + admin_not_ends_with_nocase: String + admin_contains: String + admin_not_contains: String + admin_contains_nocase: String + admin_not_contains_nocase: String + creator: String + creator_not: String + creator_gt: String + creator_lt: String + creator_gte: String + creator_lte: String + creator_in: [String!] + creator_not_in: [String!] + creator_starts_with: String + creator_starts_with_nocase: String + creator_not_starts_with: String + creator_not_starts_with_nocase: String + creator_ends_with: String + creator_ends_with_nocase: String + creator_not_ends_with: String + creator_not_ends_with_nocase: String + creator_contains: String + creator_not_contains: String + creator_contains_nocase: String + creator_not_contains_nocase: String + creator_: Creator_filter + executionBundle: String + executionBundle_not: String + executionBundle_gt: String + executionBundle_lt: String + executionBundle_gte: String + executionBundle_lte: String + executionBundle_in: [String!] + executionBundle_not_in: [String!] + executionBundle_starts_with: String + executionBundle_starts_with_nocase: String + executionBundle_not_starts_with: String + executionBundle_not_starts_with_nocase: String + executionBundle_ends_with: String + executionBundle_ends_with_nocase: String + executionBundle_not_ends_with: String + executionBundle_not_ends_with_nocase: String + executionBundle_contains: String + executionBundle_not_contains: String + executionBundle_contains_nocase: String + executionBundle_not_contains_nocase: String + _change_block: BlockChangedFilter + and: [Strategy_filter] + or: [Strategy_filter] +} + +enum Vault_orderBy { + id + deployer + token0 + token1 + totalAmount0 + totalAmount1 + createdAt + lastSnapshot + pool + state + statusUpdates + strategyToken + strategyToken__id + strategyToken__name + strategyToken__createdAt + strategyToken__admin + strategyToken__executionBundle + snapshots + permissions + positions + depositors + annualPercentageYield + annualPercentageDailyYield + annualPercentageMonthlyYield + annualPercentageYearlyYield + lastTotalT0ValuePerLPT + accruedStrategistFees0 + accruedStrategistFees1 + fees0 + fees1 + beaconName + jobs + gasUsed + gasDeposited + totalLPTokensIssued + token1Symbol + decimals + feeTier + name + symbol + token0Balance + token0Decimals + token0Name + token0Symbol + token1Balance + token1Decimals + token1Name + payloadIpfs + vaultManager + averageFeeArrPerSecond + totalSnapshots + annualFeeARR + dailyFeeAPR + weeklyFeeAPR + totalValueLockedToken0 + totalValueLockedToken1 +} + +input Vault_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + deployer: String + deployer_not: String + deployer_gt: String + deployer_lt: String + deployer_gte: String + deployer_lte: String + deployer_in: [String!] + deployer_not_in: [String!] + deployer_starts_with: String + deployer_starts_with_nocase: String + deployer_not_starts_with: String + deployer_not_starts_with_nocase: String + deployer_ends_with: String + deployer_ends_with_nocase: String + deployer_not_ends_with: String + deployer_not_ends_with_nocase: String + deployer_contains: String + deployer_not_contains: String + deployer_contains_nocase: String + deployer_not_contains_nocase: String + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + totalAmount0: BigDecimal + totalAmount0_not: BigDecimal + totalAmount0_gt: BigDecimal + totalAmount0_lt: BigDecimal + totalAmount0_gte: BigDecimal + totalAmount0_lte: BigDecimal + totalAmount0_in: [BigDecimal!] + totalAmount0_not_in: [BigDecimal!] + totalAmount1: BigDecimal + totalAmount1_not: BigDecimal + totalAmount1_gt: BigDecimal + totalAmount1_lt: BigDecimal + totalAmount1_gte: BigDecimal + totalAmount1_lte: BigDecimal + totalAmount1_in: [BigDecimal!] + totalAmount1_not_in: [BigDecimal!] + createdAt: BigInt + createdAt_not: BigInt + createdAt_gt: BigInt + createdAt_lt: BigInt + createdAt_gte: BigInt + createdAt_lte: BigInt + createdAt_in: [BigInt!] + createdAt_not_in: [BigInt!] + lastSnapshot: BigInt + lastSnapshot_not: BigInt + lastSnapshot_gt: BigInt + lastSnapshot_lt: BigInt + lastSnapshot_gte: BigInt + lastSnapshot_lte: BigInt + lastSnapshot_in: [BigInt!] + lastSnapshot_not_in: [BigInt!] + pool: String + pool_not: String + pool_gt: String + pool_lt: String + pool_gte: String + pool_lte: String + pool_in: [String!] + pool_not_in: [String!] + pool_starts_with: String + pool_starts_with_nocase: String + pool_not_starts_with: String + pool_not_starts_with_nocase: String + pool_ends_with: String + pool_ends_with_nocase: String + pool_not_ends_with: String + pool_not_ends_with_nocase: String + pool_contains: String + pool_not_contains: String + pool_contains_nocase: String + pool_not_contains_nocase: String + state: BigInt + state_not: BigInt + state_gt: BigInt + state_lt: BigInt + state_gte: BigInt + state_lte: BigInt + state_in: [BigInt!] + state_not_in: [BigInt!] + statusUpdates_: VaultStateChanged_filter + strategyToken: String + strategyToken_not: String + strategyToken_gt: String + strategyToken_lt: String + strategyToken_gte: String + strategyToken_lte: String + strategyToken_in: [String!] + strategyToken_not_in: [String!] + strategyToken_starts_with: String + strategyToken_starts_with_nocase: String + strategyToken_not_starts_with: String + strategyToken_not_starts_with_nocase: String + strategyToken_ends_with: String + strategyToken_ends_with_nocase: String + strategyToken_not_ends_with: String + strategyToken_not_ends_with_nocase: String + strategyToken_contains: String + strategyToken_not_contains: String + strategyToken_contains_nocase: String + strategyToken_not_contains_nocase: String + strategyToken_: Strategy_filter + snapshots_: VaultSnapshot_filter + permissions_: WhiteListVaultPermission_filter + positions_: VaultPosition_filter + depositors_: Depositor_filter + annualPercentageYield: BigDecimal + annualPercentageYield_not: BigDecimal + annualPercentageYield_gt: BigDecimal + annualPercentageYield_lt: BigDecimal + annualPercentageYield_gte: BigDecimal + annualPercentageYield_lte: BigDecimal + annualPercentageYield_in: [BigDecimal!] + annualPercentageYield_not_in: [BigDecimal!] + annualPercentageDailyYield: BigDecimal + annualPercentageDailyYield_not: BigDecimal + annualPercentageDailyYield_gt: BigDecimal + annualPercentageDailyYield_lt: BigDecimal + annualPercentageDailyYield_gte: BigDecimal + annualPercentageDailyYield_lte: BigDecimal + annualPercentageDailyYield_in: [BigDecimal!] + annualPercentageDailyYield_not_in: [BigDecimal!] + annualPercentageMonthlyYield: BigDecimal + annualPercentageMonthlyYield_not: BigDecimal + annualPercentageMonthlyYield_gt: BigDecimal + annualPercentageMonthlyYield_lt: BigDecimal + annualPercentageMonthlyYield_gte: BigDecimal + annualPercentageMonthlyYield_lte: BigDecimal + annualPercentageMonthlyYield_in: [BigDecimal!] + annualPercentageMonthlyYield_not_in: [BigDecimal!] + annualPercentageYearlyYield: BigDecimal + annualPercentageYearlyYield_not: BigDecimal + annualPercentageYearlyYield_gt: BigDecimal + annualPercentageYearlyYield_lt: BigDecimal + annualPercentageYearlyYield_gte: BigDecimal + annualPercentageYearlyYield_lte: BigDecimal + annualPercentageYearlyYield_in: [BigDecimal!] + annualPercentageYearlyYield_not_in: [BigDecimal!] + lastTotalT0ValuePerLPT: BigDecimal + lastTotalT0ValuePerLPT_not: BigDecimal + lastTotalT0ValuePerLPT_gt: BigDecimal + lastTotalT0ValuePerLPT_lt: BigDecimal + lastTotalT0ValuePerLPT_gte: BigDecimal + lastTotalT0ValuePerLPT_lte: BigDecimal + lastTotalT0ValuePerLPT_in: [BigDecimal!] + lastTotalT0ValuePerLPT_not_in: [BigDecimal!] + accruedStrategistFees0: BigInt + accruedStrategistFees0_not: BigInt + accruedStrategistFees0_gt: BigInt + accruedStrategistFees0_lt: BigInt + accruedStrategistFees0_gte: BigInt + accruedStrategistFees0_lte: BigInt + accruedStrategistFees0_in: [BigInt!] + accruedStrategistFees0_not_in: [BigInt!] + accruedStrategistFees1: BigInt + accruedStrategistFees1_not: BigInt + accruedStrategistFees1_gt: BigInt + accruedStrategistFees1_lt: BigInt + accruedStrategistFees1_gte: BigInt + accruedStrategistFees1_lte: BigInt + accruedStrategistFees1_in: [BigInt!] + accruedStrategistFees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + beaconName: String + beaconName_not: String + beaconName_gt: String + beaconName_lt: String + beaconName_gte: String + beaconName_lte: String + beaconName_in: [String!] + beaconName_not_in: [String!] + beaconName_starts_with: String + beaconName_starts_with_nocase: String + beaconName_not_starts_with: String + beaconName_not_starts_with_nocase: String + beaconName_ends_with: String + beaconName_ends_with_nocase: String + beaconName_not_ends_with: String + beaconName_not_ends_with_nocase: String + beaconName_contains: String + beaconName_not_contains: String + beaconName_contains_nocase: String + beaconName_not_contains_nocase: String + jobs_: Job_filter + gasUsed: BigInt + gasUsed_not: BigInt + gasUsed_gt: BigInt + gasUsed_lt: BigInt + gasUsed_gte: BigInt + gasUsed_lte: BigInt + gasUsed_in: [BigInt!] + gasUsed_not_in: [BigInt!] + gasDeposited: BigInt + gasDeposited_not: BigInt + gasDeposited_gt: BigInt + gasDeposited_lt: BigInt + gasDeposited_gte: BigInt + gasDeposited_lte: BigInt + gasDeposited_in: [BigInt!] + gasDeposited_not_in: [BigInt!] + totalLPTokensIssued: BigInt + totalLPTokensIssued_not: BigInt + totalLPTokensIssued_gt: BigInt + totalLPTokensIssued_lt: BigInt + totalLPTokensIssued_gte: BigInt + totalLPTokensIssued_lte: BigInt + totalLPTokensIssued_in: [BigInt!] + totalLPTokensIssued_not_in: [BigInt!] + token1Symbol: String + token1Symbol_not: String + token1Symbol_gt: String + token1Symbol_lt: String + token1Symbol_gte: String + token1Symbol_lte: String + token1Symbol_in: [String!] + token1Symbol_not_in: [String!] + token1Symbol_starts_with: String + token1Symbol_starts_with_nocase: String + token1Symbol_not_starts_with: String + token1Symbol_not_starts_with_nocase: String + token1Symbol_ends_with: String + token1Symbol_ends_with_nocase: String + token1Symbol_not_ends_with: String + token1Symbol_not_ends_with_nocase: String + token1Symbol_contains: String + token1Symbol_not_contains: String + token1Symbol_contains_nocase: String + token1Symbol_not_contains_nocase: String + decimals: BigInt + decimals_not: BigInt + decimals_gt: BigInt + decimals_lt: BigInt + decimals_gte: BigInt + decimals_lte: BigInt + decimals_in: [BigInt!] + decimals_not_in: [BigInt!] + feeTier: BigInt + feeTier_not: BigInt + feeTier_gt: BigInt + feeTier_lt: BigInt + feeTier_gte: BigInt + feeTier_lte: BigInt + feeTier_in: [BigInt!] + feeTier_not_in: [BigInt!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + name_contains: String + name_not_contains: String + name_contains_nocase: String + name_not_contains_nocase: String + symbol: String + symbol_not: String + symbol_gt: String + symbol_lt: String + symbol_gte: String + symbol_lte: String + symbol_in: [String!] + symbol_not_in: [String!] + symbol_starts_with: String + symbol_starts_with_nocase: String + symbol_not_starts_with: String + symbol_not_starts_with_nocase: String + symbol_ends_with: String + symbol_ends_with_nocase: String + symbol_not_ends_with: String + symbol_not_ends_with_nocase: String + symbol_contains: String + symbol_not_contains: String + symbol_contains_nocase: String + symbol_not_contains_nocase: String + token0Balance: BigInt + token0Balance_not: BigInt + token0Balance_gt: BigInt + token0Balance_lt: BigInt + token0Balance_gte: BigInt + token0Balance_lte: BigInt + token0Balance_in: [BigInt!] + token0Balance_not_in: [BigInt!] + token0Decimals: BigInt + token0Decimals_not: BigInt + token0Decimals_gt: BigInt + token0Decimals_lt: BigInt + token0Decimals_gte: BigInt + token0Decimals_lte: BigInt + token0Decimals_in: [BigInt!] + token0Decimals_not_in: [BigInt!] + token0Name: String + token0Name_not: String + token0Name_gt: String + token0Name_lt: String + token0Name_gte: String + token0Name_lte: String + token0Name_in: [String!] + token0Name_not_in: [String!] + token0Name_starts_with: String + token0Name_starts_with_nocase: String + token0Name_not_starts_with: String + token0Name_not_starts_with_nocase: String + token0Name_ends_with: String + token0Name_ends_with_nocase: String + token0Name_not_ends_with: String + token0Name_not_ends_with_nocase: String + token0Name_contains: String + token0Name_not_contains: String + token0Name_contains_nocase: String + token0Name_not_contains_nocase: String + token0Symbol: String + token0Symbol_not: String + token0Symbol_gt: String + token0Symbol_lt: String + token0Symbol_gte: String + token0Symbol_lte: String + token0Symbol_in: [String!] + token0Symbol_not_in: [String!] + token0Symbol_starts_with: String + token0Symbol_starts_with_nocase: String + token0Symbol_not_starts_with: String + token0Symbol_not_starts_with_nocase: String + token0Symbol_ends_with: String + token0Symbol_ends_with_nocase: String + token0Symbol_not_ends_with: String + token0Symbol_not_ends_with_nocase: String + token0Symbol_contains: String + token0Symbol_not_contains: String + token0Symbol_contains_nocase: String + token0Symbol_not_contains_nocase: String + token1Balance: BigInt + token1Balance_not: BigInt + token1Balance_gt: BigInt + token1Balance_lt: BigInt + token1Balance_gte: BigInt + token1Balance_lte: BigInt + token1Balance_in: [BigInt!] + token1Balance_not_in: [BigInt!] + token1Decimals: BigInt + token1Decimals_not: BigInt + token1Decimals_gt: BigInt + token1Decimals_lt: BigInt + token1Decimals_gte: BigInt + token1Decimals_lte: BigInt + token1Decimals_in: [BigInt!] + token1Decimals_not_in: [BigInt!] + token1Name: String + token1Name_not: String + token1Name_gt: String + token1Name_lt: String + token1Name_gte: String + token1Name_lte: String + token1Name_in: [String!] + token1Name_not_in: [String!] + token1Name_starts_with: String + token1Name_starts_with_nocase: String + token1Name_not_starts_with: String + token1Name_not_starts_with_nocase: String + token1Name_ends_with: String + token1Name_ends_with_nocase: String + token1Name_not_ends_with: String + token1Name_not_ends_with_nocase: String + token1Name_contains: String + token1Name_not_contains: String + token1Name_contains_nocase: String + token1Name_not_contains_nocase: String + payloadIpfs: String + payloadIpfs_not: String + payloadIpfs_gt: String + payloadIpfs_lt: String + payloadIpfs_gte: String + payloadIpfs_lte: String + payloadIpfs_in: [String!] + payloadIpfs_not_in: [String!] + payloadIpfs_starts_with: String + payloadIpfs_starts_with_nocase: String + payloadIpfs_not_starts_with: String + payloadIpfs_not_starts_with_nocase: String + payloadIpfs_ends_with: String + payloadIpfs_ends_with_nocase: String + payloadIpfs_not_ends_with: String + payloadIpfs_not_ends_with_nocase: String + payloadIpfs_contains: String + payloadIpfs_not_contains: String + payloadIpfs_contains_nocase: String + payloadIpfs_not_contains_nocase: String + vaultManager: String + vaultManager_not: String + vaultManager_gt: String + vaultManager_lt: String + vaultManager_gte: String + vaultManager_lte: String + vaultManager_in: [String!] + vaultManager_not_in: [String!] + vaultManager_starts_with: String + vaultManager_starts_with_nocase: String + vaultManager_not_starts_with: String + vaultManager_not_starts_with_nocase: String + vaultManager_ends_with: String + vaultManager_ends_with_nocase: String + vaultManager_not_ends_with: String + vaultManager_not_ends_with_nocase: String + vaultManager_contains: String + vaultManager_not_contains: String + vaultManager_contains_nocase: String + vaultManager_not_contains_nocase: String + averageFeeArrPerSecond: BigDecimal + averageFeeArrPerSecond_not: BigDecimal + averageFeeArrPerSecond_gt: BigDecimal + averageFeeArrPerSecond_lt: BigDecimal + averageFeeArrPerSecond_gte: BigDecimal + averageFeeArrPerSecond_lte: BigDecimal + averageFeeArrPerSecond_in: [BigDecimal!] + averageFeeArrPerSecond_not_in: [BigDecimal!] + totalSnapshots: BigInt + totalSnapshots_not: BigInt + totalSnapshots_gt: BigInt + totalSnapshots_lt: BigInt + totalSnapshots_gte: BigInt + totalSnapshots_lte: BigInt + totalSnapshots_in: [BigInt!] + totalSnapshots_not_in: [BigInt!] + annualFeeARR: BigDecimal + annualFeeARR_not: BigDecimal + annualFeeARR_gt: BigDecimal + annualFeeARR_lt: BigDecimal + annualFeeARR_gte: BigDecimal + annualFeeARR_lte: BigDecimal + annualFeeARR_in: [BigDecimal!] + annualFeeARR_not_in: [BigDecimal!] + dailyFeeAPR: BigDecimal + dailyFeeAPR_not: BigDecimal + dailyFeeAPR_gt: BigDecimal + dailyFeeAPR_lt: BigDecimal + dailyFeeAPR_gte: BigDecimal + dailyFeeAPR_lte: BigDecimal + dailyFeeAPR_in: [BigDecimal!] + dailyFeeAPR_not_in: [BigDecimal!] + weeklyFeeAPR: BigDecimal + weeklyFeeAPR_not: BigDecimal + weeklyFeeAPR_gt: BigDecimal + weeklyFeeAPR_lt: BigDecimal + weeklyFeeAPR_gte: BigDecimal + weeklyFeeAPR_lte: BigDecimal + weeklyFeeAPR_in: [BigDecimal!] + weeklyFeeAPR_not_in: [BigDecimal!] + totalValueLockedToken0: BigDecimal + totalValueLockedToken0_not: BigDecimal + totalValueLockedToken0_gt: BigDecimal + totalValueLockedToken0_lt: BigDecimal + totalValueLockedToken0_gte: BigDecimal + totalValueLockedToken0_lte: BigDecimal + totalValueLockedToken0_in: [BigDecimal!] + totalValueLockedToken0_not_in: [BigDecimal!] + totalValueLockedToken1: BigDecimal + totalValueLockedToken1_not: BigDecimal + totalValueLockedToken1_gt: BigDecimal + totalValueLockedToken1_lt: BigDecimal + totalValueLockedToken1_gte: BigDecimal + totalValueLockedToken1_lte: BigDecimal + totalValueLockedToken1_in: [BigDecimal!] + totalValueLockedToken1_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [Vault_filter] + or: [Vault_filter] +} + +enum VaultSnapshot_orderBy { + id + timestamp + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + annualFeeAPR + dailyFeeAPR + weeklyFeeAPR + transactionHash +} + +input VaultSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + totalAmount0: BigInt + totalAmount0_not: BigInt + totalAmount0_gt: BigInt + totalAmount0_lt: BigInt + totalAmount0_gte: BigInt + totalAmount0_lte: BigInt + totalAmount0_in: [BigInt!] + totalAmount0_not_in: [BigInt!] + totalAmount1: BigInt + totalAmount1_not: BigInt + totalAmount1_gt: BigInt + totalAmount1_lt: BigInt + totalAmount1_gte: BigInt + totalAmount1_lte: BigInt + totalAmount1_in: [BigInt!] + totalAmount1_not_in: [BigInt!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + annualFeeAPR: BigDecimal + annualFeeAPR_not: BigDecimal + annualFeeAPR_gt: BigDecimal + annualFeeAPR_lt: BigDecimal + annualFeeAPR_gte: BigDecimal + annualFeeAPR_lte: BigDecimal + annualFeeAPR_in: [BigDecimal!] + annualFeeAPR_not_in: [BigDecimal!] + dailyFeeAPR: BigDecimal + dailyFeeAPR_not: BigDecimal + dailyFeeAPR_gt: BigDecimal + dailyFeeAPR_lt: BigDecimal + dailyFeeAPR_gte: BigDecimal + dailyFeeAPR_lte: BigDecimal + dailyFeeAPR_in: [BigDecimal!] + dailyFeeAPR_not_in: [BigDecimal!] + weeklyFeeAPR: BigDecimal + weeklyFeeAPR_not: BigDecimal + weeklyFeeAPR_gt: BigDecimal + weeklyFeeAPR_lt: BigDecimal + weeklyFeeAPR_gte: BigDecimal + weeklyFeeAPR_lte: BigDecimal + weeklyFeeAPR_in: [BigDecimal!] + weeklyFeeAPR_not_in: [BigDecimal!] + transactionHash: String + transactionHash_not: String + transactionHash_gt: String + transactionHash_lt: String + transactionHash_gte: String + transactionHash_lte: String + transactionHash_in: [String!] + transactionHash_not_in: [String!] + transactionHash_starts_with: String + transactionHash_starts_with_nocase: String + transactionHash_not_starts_with: String + transactionHash_not_starts_with_nocase: String + transactionHash_ends_with: String + transactionHash_ends_with_nocase: String + transactionHash_not_ends_with: String + transactionHash_not_ends_with_nocase: String + transactionHash_contains: String + transactionHash_not_contains: String + transactionHash_contains_nocase: String + transactionHash_not_contains_nocase: String + _change_block: BlockChangedFilter + and: [VaultSnapshot_filter] + or: [VaultSnapshot_filter] +} + +enum PrevVaultSnapshot_orderBy { + id + timestamp + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 +} + +input PrevVaultSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + totalAmount0: BigInt + totalAmount0_not: BigInt + totalAmount0_gt: BigInt + totalAmount0_lt: BigInt + totalAmount0_gte: BigInt + totalAmount0_lte: BigInt + totalAmount0_in: [BigInt!] + totalAmount0_not_in: [BigInt!] + totalAmount1: BigInt + totalAmount1_not: BigInt + totalAmount1_gt: BigInt + totalAmount1_lt: BigInt + totalAmount1_gte: BigInt + totalAmount1_lte: BigInt + totalAmount1_in: [BigInt!] + totalAmount1_not_in: [BigInt!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [PrevVaultSnapshot_filter] + or: [PrevVaultSnapshot_filter] +} + +enum PrevDailyVaultSnapshot_orderBy { + id + timestamp + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 +} + +input PrevDailyVaultSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + totalAmount0: BigInt + totalAmount0_not: BigInt + totalAmount0_gt: BigInt + totalAmount0_lt: BigInt + totalAmount0_gte: BigInt + totalAmount0_lte: BigInt + totalAmount0_in: [BigInt!] + totalAmount0_not_in: [BigInt!] + totalAmount1: BigInt + totalAmount1_not: BigInt + totalAmount1_gt: BigInt + totalAmount1_lt: BigInt + totalAmount1_gte: BigInt + totalAmount1_lte: BigInt + totalAmount1_in: [BigInt!] + totalAmount1_not_in: [BigInt!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [PrevDailyVaultSnapshot_filter] + or: [PrevDailyVaultSnapshot_filter] +} + +enum PrevMonthlyVaultSnapshot_orderBy { + id + timestamp + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 +} + +input PrevMonthlyVaultSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + totalAmount0: BigInt + totalAmount0_not: BigInt + totalAmount0_gt: BigInt + totalAmount0_lt: BigInt + totalAmount0_gte: BigInt + totalAmount0_lte: BigInt + totalAmount0_in: [BigInt!] + totalAmount0_not_in: [BigInt!] + totalAmount1: BigInt + totalAmount1_not: BigInt + totalAmount1_gt: BigInt + totalAmount1_lt: BigInt + totalAmount1_gte: BigInt + totalAmount1_lte: BigInt + totalAmount1_in: [BigInt!] + totalAmount1_not_in: [BigInt!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [PrevMonthlyVaultSnapshot_filter] + or: [PrevMonthlyVaultSnapshot_filter] +} + +enum PrevAnnualVaultSnapshot_orderBy { + id + timestamp + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 +} + +input PrevAnnualVaultSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + totalAmount0: BigInt + totalAmount0_not: BigInt + totalAmount0_gt: BigInt + totalAmount0_lt: BigInt + totalAmount0_gte: BigInt + totalAmount0_lte: BigInt + totalAmount0_in: [BigInt!] + totalAmount0_not_in: [BigInt!] + totalAmount1: BigInt + totalAmount1_not: BigInt + totalAmount1_gt: BigInt + totalAmount1_lt: BigInt + totalAmount1_gte: BigInt + totalAmount1_lte: BigInt + totalAmount1_in: [BigInt!] + totalAmount1_not_in: [BigInt!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [PrevAnnualVaultSnapshot_filter] + or: [PrevAnnualVaultSnapshot_filter] +} + +enum PrevWeeklyVaultSnapshot_orderBy { + id + timestamp + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + totalAmount0 + totalAmount1 + sqrtPriceX96 + totalSupply + fees1 + fees0 + averageFeeArrPerSecond + totalSnapshots + weeklyFeeApr +} + +input PrevWeeklyVaultSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + totalAmount0: BigInt + totalAmount0_not: BigInt + totalAmount0_gt: BigInt + totalAmount0_lt: BigInt + totalAmount0_gte: BigInt + totalAmount0_lte: BigInt + totalAmount0_in: [BigInt!] + totalAmount0_not_in: [BigInt!] + totalAmount1: BigInt + totalAmount1_not: BigInt + totalAmount1_gt: BigInt + totalAmount1_lt: BigInt + totalAmount1_gte: BigInt + totalAmount1_lte: BigInt + totalAmount1_in: [BigInt!] + totalAmount1_not_in: [BigInt!] + sqrtPriceX96: BigInt + sqrtPriceX96_not: BigInt + sqrtPriceX96_gt: BigInt + sqrtPriceX96_lt: BigInt + sqrtPriceX96_gte: BigInt + sqrtPriceX96_lte: BigInt + sqrtPriceX96_in: [BigInt!] + sqrtPriceX96_not_in: [BigInt!] + totalSupply: BigInt + totalSupply_not: BigInt + totalSupply_gt: BigInt + totalSupply_lt: BigInt + totalSupply_gte: BigInt + totalSupply_lte: BigInt + totalSupply_in: [BigInt!] + totalSupply_not_in: [BigInt!] + fees1: BigInt + fees1_not: BigInt + fees1_gt: BigInt + fees1_lt: BigInt + fees1_gte: BigInt + fees1_lte: BigInt + fees1_in: [BigInt!] + fees1_not_in: [BigInt!] + fees0: BigInt + fees0_not: BigInt + fees0_gt: BigInt + fees0_lt: BigInt + fees0_gte: BigInt + fees0_lte: BigInt + fees0_in: [BigInt!] + fees0_not_in: [BigInt!] + averageFeeArrPerSecond: BigDecimal + averageFeeArrPerSecond_not: BigDecimal + averageFeeArrPerSecond_gt: BigDecimal + averageFeeArrPerSecond_lt: BigDecimal + averageFeeArrPerSecond_gte: BigDecimal + averageFeeArrPerSecond_lte: BigDecimal + averageFeeArrPerSecond_in: [BigDecimal!] + averageFeeArrPerSecond_not_in: [BigDecimal!] + totalSnapshots: BigInt + totalSnapshots_not: BigInt + totalSnapshots_gt: BigInt + totalSnapshots_lt: BigInt + totalSnapshots_gte: BigInt + totalSnapshots_lte: BigInt + totalSnapshots_in: [BigInt!] + totalSnapshots_not_in: [BigInt!] + weeklyFeeApr: BigDecimal + weeklyFeeApr_not: BigDecimal + weeklyFeeApr_gt: BigDecimal + weeklyFeeApr_lt: BigDecimal + weeklyFeeApr_gte: BigDecimal + weeklyFeeApr_lte: BigDecimal + weeklyFeeApr_in: [BigDecimal!] + weeklyFeeApr_not_in: [BigDecimal!] + _change_block: BlockChangedFilter + and: [PrevWeeklyVaultSnapshot_filter] + or: [PrevWeeklyVaultSnapshot_filter] +} + +enum VaultStateChanged_orderBy { + id + timeStamp + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + status +} + +input VaultStateChanged_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + status: BigInt + status_not: BigInt + status_gt: BigInt + status_lt: BigInt + status_gte: BigInt + status_lte: BigInt + status_in: [BigInt!] + status_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultStateChanged_filter] + or: [VaultStateChanged_filter] +} + +enum VaultDeposit_orderBy { + id + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + amount0 + amount1 + token0 + token1 + sender + transactionHash + timeStamp + shares + executor + depositCaller + blockNumber +} + +input VaultDeposit_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + sender: String + sender_not: String + sender_gt: String + sender_lt: String + sender_gte: String + sender_lte: String + sender_in: [String!] + sender_not_in: [String!] + sender_starts_with: String + sender_starts_with_nocase: String + sender_not_starts_with: String + sender_not_starts_with_nocase: String + sender_ends_with: String + sender_ends_with_nocase: String + sender_not_ends_with: String + sender_not_ends_with_nocase: String + sender_contains: String + sender_not_contains: String + sender_contains_nocase: String + sender_not_contains_nocase: String + transactionHash: String + transactionHash_not: String + transactionHash_gt: String + transactionHash_lt: String + transactionHash_gte: String + transactionHash_lte: String + transactionHash_in: [String!] + transactionHash_not_in: [String!] + transactionHash_starts_with: String + transactionHash_starts_with_nocase: String + transactionHash_not_starts_with: String + transactionHash_not_starts_with_nocase: String + transactionHash_ends_with: String + transactionHash_ends_with_nocase: String + transactionHash_not_ends_with: String + transactionHash_not_ends_with_nocase: String + transactionHash_contains: String + transactionHash_not_contains: String + transactionHash_contains_nocase: String + transactionHash_not_contains_nocase: String + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + shares: BigInt + shares_not: BigInt + shares_gt: BigInt + shares_lt: BigInt + shares_gte: BigInt + shares_lte: BigInt + shares_in: [BigInt!] + shares_not_in: [BigInt!] + executor: String + executor_not: String + executor_gt: String + executor_lt: String + executor_gte: String + executor_lte: String + executor_in: [String!] + executor_not_in: [String!] + executor_starts_with: String + executor_starts_with_nocase: String + executor_not_starts_with: String + executor_not_starts_with_nocase: String + executor_ends_with: String + executor_ends_with_nocase: String + executor_not_ends_with: String + executor_not_ends_with_nocase: String + executor_contains: String + executor_not_contains: String + executor_contains_nocase: String + executor_not_contains_nocase: String + depositCaller: String + depositCaller_not: String + depositCaller_gt: String + depositCaller_lt: String + depositCaller_gte: String + depositCaller_lte: String + depositCaller_in: [String!] + depositCaller_not_in: [String!] + depositCaller_starts_with: String + depositCaller_starts_with_nocase: String + depositCaller_not_starts_with: String + depositCaller_not_starts_with_nocase: String + depositCaller_ends_with: String + depositCaller_ends_with_nocase: String + depositCaller_not_ends_with: String + depositCaller_not_ends_with_nocase: String + depositCaller_contains: String + depositCaller_not_contains: String + depositCaller_contains_nocase: String + depositCaller_not_contains_nocase: String + blockNumber: BigInt + blockNumber_not: BigInt + blockNumber_gt: BigInt + blockNumber_lt: BigInt + blockNumber_gte: BigInt + blockNumber_lte: BigInt + blockNumber_in: [BigInt!] + blockNumber_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultDeposit_filter] + or: [VaultDeposit_filter] +} + +enum VaultWithdraw_orderBy { + id + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + amount0 + amount1 + token0 + token1 + timeStamp + shares + sender + transactionHash + blockNumber +} + +input VaultWithdraw_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + amount0: BigDecimal + amount0_not: BigDecimal + amount0_gt: BigDecimal + amount0_lt: BigDecimal + amount0_gte: BigDecimal + amount0_lte: BigDecimal + amount0_in: [BigDecimal!] + amount0_not_in: [BigDecimal!] + amount1: BigDecimal + amount1_not: BigDecimal + amount1_gt: BigDecimal + amount1_lt: BigDecimal + amount1_gte: BigDecimal + amount1_lte: BigDecimal + amount1_in: [BigDecimal!] + amount1_not_in: [BigDecimal!] + token0: String + token0_not: String + token0_gt: String + token0_lt: String + token0_gte: String + token0_lte: String + token0_in: [String!] + token0_not_in: [String!] + token0_starts_with: String + token0_starts_with_nocase: String + token0_not_starts_with: String + token0_not_starts_with_nocase: String + token0_ends_with: String + token0_ends_with_nocase: String + token0_not_ends_with: String + token0_not_ends_with_nocase: String + token0_contains: String + token0_not_contains: String + token0_contains_nocase: String + token0_not_contains_nocase: String + token1: String + token1_not: String + token1_gt: String + token1_lt: String + token1_gte: String + token1_lte: String + token1_in: [String!] + token1_not_in: [String!] + token1_starts_with: String + token1_starts_with_nocase: String + token1_not_starts_with: String + token1_not_starts_with_nocase: String + token1_ends_with: String + token1_ends_with_nocase: String + token1_not_ends_with: String + token1_not_ends_with_nocase: String + token1_contains: String + token1_not_contains: String + token1_contains_nocase: String + token1_not_contains_nocase: String + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + shares: BigInt + shares_not: BigInt + shares_gt: BigInt + shares_lt: BigInt + shares_gte: BigInt + shares_lte: BigInt + shares_in: [BigInt!] + shares_not_in: [BigInt!] + sender: String + sender_not: String + sender_gt: String + sender_lt: String + sender_gte: String + sender_lte: String + sender_in: [String!] + sender_not_in: [String!] + sender_starts_with: String + sender_starts_with_nocase: String + sender_not_starts_with: String + sender_not_starts_with_nocase: String + sender_ends_with: String + sender_ends_with_nocase: String + sender_not_ends_with: String + sender_not_ends_with_nocase: String + sender_contains: String + sender_not_contains: String + sender_contains_nocase: String + sender_not_contains_nocase: String + transactionHash: String + transactionHash_not: String + transactionHash_gt: String + transactionHash_lt: String + transactionHash_gte: String + transactionHash_lte: String + transactionHash_in: [String!] + transactionHash_not_in: [String!] + transactionHash_starts_with: String + transactionHash_starts_with_nocase: String + transactionHash_not_starts_with: String + transactionHash_not_starts_with_nocase: String + transactionHash_ends_with: String + transactionHash_ends_with_nocase: String + transactionHash_not_ends_with: String + transactionHash_not_ends_with_nocase: String + transactionHash_contains: String + transactionHash_not_contains: String + transactionHash_contains_nocase: String + transactionHash_not_contains_nocase: String + blockNumber: BigInt + blockNumber_not: BigInt + blockNumber_gt: BigInt + blockNumber_lt: BigInt + blockNumber_gte: BigInt + blockNumber_lte: BigInt + blockNumber_in: [BigInt!] + blockNumber_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultWithdraw_filter] + or: [VaultWithdraw_filter] +} + +enum Depositor_orderBy { + id + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + account + executor + depositCaller + depositedAmount0 + depositedAmount1 + withdrawnAmount0 + withdrawnAmount1 + liquidityAmount0 + liquidityAmount1 + createdTimestamp + updatedTimestamp + shares +} + +input Depositor_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + account: String + account_not: String + account_gt: String + account_lt: String + account_gte: String + account_lte: String + account_in: [String!] + account_not_in: [String!] + account_starts_with: String + account_starts_with_nocase: String + account_not_starts_with: String + account_not_starts_with_nocase: String + account_ends_with: String + account_ends_with_nocase: String + account_not_ends_with: String + account_not_ends_with_nocase: String + account_contains: String + account_not_contains: String + account_contains_nocase: String + account_not_contains_nocase: String + executor: String + executor_not: String + executor_gt: String + executor_lt: String + executor_gte: String + executor_lte: String + executor_in: [String!] + executor_not_in: [String!] + executor_starts_with: String + executor_starts_with_nocase: String + executor_not_starts_with: String + executor_not_starts_with_nocase: String + executor_ends_with: String + executor_ends_with_nocase: String + executor_not_ends_with: String + executor_not_ends_with_nocase: String + executor_contains: String + executor_not_contains: String + executor_contains_nocase: String + executor_not_contains_nocase: String + depositCaller: String + depositCaller_not: String + depositCaller_gt: String + depositCaller_lt: String + depositCaller_gte: String + depositCaller_lte: String + depositCaller_in: [String!] + depositCaller_not_in: [String!] + depositCaller_starts_with: String + depositCaller_starts_with_nocase: String + depositCaller_not_starts_with: String + depositCaller_not_starts_with_nocase: String + depositCaller_ends_with: String + depositCaller_ends_with_nocase: String + depositCaller_not_ends_with: String + depositCaller_not_ends_with_nocase: String + depositCaller_contains: String + depositCaller_not_contains: String + depositCaller_contains_nocase: String + depositCaller_not_contains_nocase: String + depositedAmount0: BigInt + depositedAmount0_not: BigInt + depositedAmount0_gt: BigInt + depositedAmount0_lt: BigInt + depositedAmount0_gte: BigInt + depositedAmount0_lte: BigInt + depositedAmount0_in: [BigInt!] + depositedAmount0_not_in: [BigInt!] + depositedAmount1: BigInt + depositedAmount1_not: BigInt + depositedAmount1_gt: BigInt + depositedAmount1_lt: BigInt + depositedAmount1_gte: BigInt + depositedAmount1_lte: BigInt + depositedAmount1_in: [BigInt!] + depositedAmount1_not_in: [BigInt!] + withdrawnAmount0: BigInt + withdrawnAmount0_not: BigInt + withdrawnAmount0_gt: BigInt + withdrawnAmount0_lt: BigInt + withdrawnAmount0_gte: BigInt + withdrawnAmount0_lte: BigInt + withdrawnAmount0_in: [BigInt!] + withdrawnAmount0_not_in: [BigInt!] + withdrawnAmount1: BigInt + withdrawnAmount1_not: BigInt + withdrawnAmount1_gt: BigInt + withdrawnAmount1_lt: BigInt + withdrawnAmount1_gte: BigInt + withdrawnAmount1_lte: BigInt + withdrawnAmount1_in: [BigInt!] + withdrawnAmount1_not_in: [BigInt!] + liquidityAmount0: BigInt + liquidityAmount0_not: BigInt + liquidityAmount0_gt: BigInt + liquidityAmount0_lt: BigInt + liquidityAmount0_gte: BigInt + liquidityAmount0_lte: BigInt + liquidityAmount0_in: [BigInt!] + liquidityAmount0_not_in: [BigInt!] + liquidityAmount1: BigInt + liquidityAmount1_not: BigInt + liquidityAmount1_gt: BigInt + liquidityAmount1_lt: BigInt + liquidityAmount1_gte: BigInt + liquidityAmount1_lte: BigInt + liquidityAmount1_in: [BigInt!] + liquidityAmount1_not_in: [BigInt!] + createdTimestamp: BigInt + createdTimestamp_not: BigInt + createdTimestamp_gt: BigInt + createdTimestamp_lt: BigInt + createdTimestamp_gte: BigInt + createdTimestamp_lte: BigInt + createdTimestamp_in: [BigInt!] + createdTimestamp_not_in: [BigInt!] + updatedTimestamp: BigInt + updatedTimestamp_not: BigInt + updatedTimestamp_gt: BigInt + updatedTimestamp_lt: BigInt + updatedTimestamp_gte: BigInt + updatedTimestamp_lte: BigInt + updatedTimestamp_in: [BigInt!] + updatedTimestamp_not_in: [BigInt!] + shares: BigInt + shares_not: BigInt + shares_gt: BigInt + shares_lt: BigInt + shares_gte: BigInt + shares_lte: BigInt + shares_in: [BigInt!] + shares_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Depositor_filter] + or: [Depositor_filter] +} + +enum VaultBeacon_orderBy { + id + address + ipfsHash + name + status + timestamp + updateTimestamp +} + +input VaultBeacon_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + address: String + address_not: String + address_gt: String + address_lt: String + address_gte: String + address_lte: String + address_in: [String!] + address_not_in: [String!] + address_starts_with: String + address_starts_with_nocase: String + address_not_starts_with: String + address_not_starts_with_nocase: String + address_ends_with: String + address_ends_with_nocase: String + address_not_ends_with: String + address_not_ends_with_nocase: String + address_contains: String + address_not_contains: String + address_contains_nocase: String + address_not_contains_nocase: String + ipfsHash: String + ipfsHash_not: String + ipfsHash_gt: String + ipfsHash_lt: String + ipfsHash_gte: String + ipfsHash_lte: String + ipfsHash_in: [String!] + ipfsHash_not_in: [String!] + ipfsHash_starts_with: String + ipfsHash_starts_with_nocase: String + ipfsHash_not_starts_with: String + ipfsHash_not_starts_with_nocase: String + ipfsHash_ends_with: String + ipfsHash_ends_with_nocase: String + ipfsHash_not_ends_with: String + ipfsHash_not_ends_with_nocase: String + ipfsHash_contains: String + ipfsHash_not_contains: String + ipfsHash_contains_nocase: String + ipfsHash_not_contains_nocase: String + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + name_contains: String + name_not_contains: String + name_contains_nocase: String + name_not_contains_nocase: String + status: String + status_not: String + status_gt: String + status_lt: String + status_gte: String + status_lte: String + status_in: [String!] + status_not_in: [String!] + status_starts_with: String + status_starts_with_nocase: String + status_not_starts_with: String + status_not_starts_with_nocase: String + status_ends_with: String + status_ends_with_nocase: String + status_not_ends_with: String + status_not_ends_with_nocase: String + status_contains: String + status_not_contains: String + status_contains_nocase: String + status_not_contains_nocase: String + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + updateTimestamp: BigInt + updateTimestamp_not: BigInt + updateTimestamp_gt: BigInt + updateTimestamp_lt: BigInt + updateTimestamp_gte: BigInt + updateTimestamp_lte: BigInt + updateTimestamp_in: [BigInt!] + updateTimestamp_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultBeacon_filter] + or: [VaultBeacon_filter] +} + +enum VaultPosition_orderBy { + id + upperTick + lowerTick + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + relativeWeight + timestamp +} + +input VaultPosition_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + upperTick: [BigInt!] + upperTick_not: [BigInt!] + upperTick_contains: [BigInt!] + upperTick_not_contains: [BigInt!] + upperTick_contains_nocase: [BigInt!] + upperTick_not_contains_nocase: [BigInt!] + lowerTick: [BigInt!] + lowerTick_not: [BigInt!] + lowerTick_contains: [BigInt!] + lowerTick_not_contains: [BigInt!] + lowerTick_contains_nocase: [BigInt!] + lowerTick_not_contains_nocase: [BigInt!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + relativeWeight: [BigInt!] + relativeWeight_not: [BigInt!] + relativeWeight_contains: [BigInt!] + relativeWeight_not_contains: [BigInt!] + relativeWeight_contains_nocase: [BigInt!] + relativeWeight_not_contains_nocase: [BigInt!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultPosition_filter] + or: [VaultPosition_filter] +} + +enum LiquiditySteer_orderBy { + id + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + timeStamp + tick +} + +input LiquiditySteer_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + tick: BigInt + tick_not: BigInt + tick_gt: BigInt + tick_lt: BigInt + tick_gte: BigInt + tick_lte: BigInt + tick_in: [BigInt!] + tick_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [LiquiditySteer_filter] + or: [LiquiditySteer_filter] +} + +enum OrchestratorReward_orderBy { + id + timeStamp + updatedTimeStamp + address + reward + trackerId + trackerId__id + trackerId__timeStamp +} + +input OrchestratorReward_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + updatedTimeStamp: BigInt + updatedTimeStamp_not: BigInt + updatedTimeStamp_gt: BigInt + updatedTimeStamp_lt: BigInt + updatedTimeStamp_gte: BigInt + updatedTimeStamp_lte: BigInt + updatedTimeStamp_in: [BigInt!] + updatedTimeStamp_not_in: [BigInt!] + address: String + address_not: String + address_gt: String + address_lt: String + address_gte: String + address_lte: String + address_in: [String!] + address_not_in: [String!] + address_starts_with: String + address_starts_with_nocase: String + address_not_starts_with: String + address_not_starts_with_nocase: String + address_ends_with: String + address_ends_with_nocase: String + address_not_ends_with: String + address_not_ends_with_nocase: String + address_contains: String + address_not_contains: String + address_contains_nocase: String + address_not_contains_nocase: String + reward: BigInt + reward_not: BigInt + reward_gt: BigInt + reward_lt: BigInt + reward_gte: BigInt + reward_lte: BigInt + reward_in: [BigInt!] + reward_not_in: [BigInt!] + trackerId: String + trackerId_not: String + trackerId_gt: String + trackerId_lt: String + trackerId_gte: String + trackerId_lte: String + trackerId_in: [String!] + trackerId_not_in: [String!] + trackerId_starts_with: String + trackerId_starts_with_nocase: String + trackerId_not_starts_with: String + trackerId_not_starts_with_nocase: String + trackerId_ends_with: String + trackerId_ends_with_nocase: String + trackerId_not_ends_with: String + trackerId_not_ends_with_nocase: String + trackerId_contains: String + trackerId_not_contains: String + trackerId_contains_nocase: String + trackerId_not_contains_nocase: String + trackerId_: OrchestratorRewardTracker_filter + _change_block: BlockChangedFilter + and: [OrchestratorReward_filter] + or: [OrchestratorReward_filter] +} + +enum OrchestratorRewardTracker_orderBy { + id + timeStamp + rewards +} + +input OrchestratorRewardTracker_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + rewards_: OrchestratorReward_filter + _change_block: BlockChangedFilter + and: [OrchestratorRewardTracker_filter] + or: [OrchestratorRewardTracker_filter] +} + +enum OrchestratorRewardSnapshot_orderBy { + id + timeStamp + updatedTimeStamp + address + reward +} + +input OrchestratorRewardSnapshot_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timeStamp: BigInt + timeStamp_not: BigInt + timeStamp_gt: BigInt + timeStamp_lt: BigInt + timeStamp_gte: BigInt + timeStamp_lte: BigInt + timeStamp_in: [BigInt!] + timeStamp_not_in: [BigInt!] + updatedTimeStamp: BigInt + updatedTimeStamp_not: BigInt + updatedTimeStamp_gt: BigInt + updatedTimeStamp_lt: BigInt + updatedTimeStamp_gte: BigInt + updatedTimeStamp_lte: BigInt + updatedTimeStamp_in: [BigInt!] + updatedTimeStamp_not_in: [BigInt!] + address: String + address_not: String + address_gt: String + address_lt: String + address_gte: String + address_lte: String + address_in: [String!] + address_not_in: [String!] + address_starts_with: String + address_starts_with_nocase: String + address_not_starts_with: String + address_not_starts_with_nocase: String + address_ends_with: String + address_ends_with_nocase: String + address_not_ends_with: String + address_not_ends_with_nocase: String + address_contains: String + address_not_contains: String + address_contains_nocase: String + address_not_contains_nocase: String + reward: BigInt + reward_not: BigInt + reward_gt: BigInt + reward_lt: BigInt + reward_gte: BigInt + reward_lte: BigInt + reward_in: [BigInt!] + reward_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [OrchestratorRewardSnapshot_filter] + or: [OrchestratorRewardSnapshot_filter] +} + +enum Bundle_orderBy { + id + createdAt + bundle + creator + host + source + output + active + infoHash + hash +} + +input Bundle_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + createdAt: BigInt + createdAt_not: BigInt + createdAt_gt: BigInt + createdAt_lt: BigInt + createdAt_gte: BigInt + createdAt_lte: BigInt + createdAt_in: [BigInt!] + createdAt_not_in: [BigInt!] + bundle: String + bundle_not: String + bundle_gt: String + bundle_lt: String + bundle_gte: String + bundle_lte: String + bundle_in: [String!] + bundle_not_in: [String!] + bundle_starts_with: String + bundle_starts_with_nocase: String + bundle_not_starts_with: String + bundle_not_starts_with_nocase: String + bundle_ends_with: String + bundle_ends_with_nocase: String + bundle_not_ends_with: String + bundle_not_ends_with_nocase: String + bundle_contains: String + bundle_not_contains: String + bundle_contains_nocase: String + bundle_not_contains_nocase: String + creator: String + creator_not: String + creator_gt: String + creator_lt: String + creator_gte: String + creator_lte: String + creator_in: [String!] + creator_not_in: [String!] + creator_starts_with: String + creator_starts_with_nocase: String + creator_not_starts_with: String + creator_not_starts_with_nocase: String + creator_ends_with: String + creator_ends_with_nocase: String + creator_not_ends_with: String + creator_not_ends_with_nocase: String + creator_contains: String + creator_not_contains: String + creator_contains_nocase: String + creator_not_contains_nocase: String + host: String + host_not: String + host_gt: String + host_lt: String + host_gte: String + host_lte: String + host_in: [String!] + host_not_in: [String!] + host_starts_with: String + host_starts_with_nocase: String + host_not_starts_with: String + host_not_starts_with_nocase: String + host_ends_with: String + host_ends_with_nocase: String + host_not_ends_with: String + host_not_ends_with_nocase: String + host_contains: String + host_not_contains: String + host_contains_nocase: String + host_not_contains_nocase: String + source: String + source_not: String + source_gt: String + source_lt: String + source_gte: String + source_lte: String + source_in: [String!] + source_not_in: [String!] + source_starts_with: String + source_starts_with_nocase: String + source_not_starts_with: String + source_not_starts_with_nocase: String + source_ends_with: String + source_ends_with_nocase: String + source_not_ends_with: String + source_not_ends_with_nocase: String + source_contains: String + source_not_contains: String + source_contains_nocase: String + source_not_contains_nocase: String + output: String + output_not: String + output_gt: String + output_lt: String + output_gte: String + output_lte: String + output_in: [String!] + output_not_in: [String!] + output_starts_with: String + output_starts_with_nocase: String + output_not_starts_with: String + output_not_starts_with_nocase: String + output_ends_with: String + output_ends_with_nocase: String + output_not_ends_with: String + output_not_ends_with_nocase: String + output_contains: String + output_not_contains: String + output_contains_nocase: String + output_not_contains_nocase: String + active: Boolean + active_not: Boolean + active_gt: Boolean + active_lt: Boolean + active_gte: Boolean + active_lte: Boolean + active_in: [Boolean!] + active_not_in: [Boolean!] + infoHash: String + infoHash_not: String + infoHash_gt: String + infoHash_lt: String + infoHash_gte: String + infoHash_lte: String + infoHash_in: [String!] + infoHash_not_in: [String!] + infoHash_starts_with: String + infoHash_starts_with_nocase: String + infoHash_not_starts_with: String + infoHash_not_starts_with_nocase: String + infoHash_ends_with: String + infoHash_ends_with_nocase: String + infoHash_not_ends_with: String + infoHash_not_ends_with_nocase: String + infoHash_contains: String + infoHash_not_contains: String + infoHash_contains_nocase: String + infoHash_not_contains_nocase: String + hash: String + hash_not: String + hash_gt: String + hash_lt: String + hash_gte: String + hash_lte: String + hash_in: [String!] + hash_not_in: [String!] + hash_starts_with: String + hash_starts_with_nocase: String + hash_not_starts_with: String + hash_not_starts_with_nocase: String + hash_ends_with: String + hash_ends_with_nocase: String + hash_not_ends_with: String + hash_not_ends_with_nocase: String + hash_contains: String + hash_not_contains: String + hash_contains_nocase: String + hash_not_contains_nocase: String + _change_block: BlockChangedFilter + and: [Bundle_filter] + or: [Bundle_filter] +} + +enum Job_orderBy { + id + name + timestamp + jobInfo + targetAddresses + ipfsHash + executions + status + failedCounts + vaultAddress + vaultAddress__id + vaultAddress__deployer + vaultAddress__token0 + vaultAddress__token1 + vaultAddress__totalAmount0 + vaultAddress__totalAmount1 + vaultAddress__createdAt + vaultAddress__lastSnapshot + vaultAddress__pool + vaultAddress__state + vaultAddress__annualPercentageYield + vaultAddress__annualPercentageDailyYield + vaultAddress__annualPercentageMonthlyYield + vaultAddress__annualPercentageYearlyYield + vaultAddress__lastTotalT0ValuePerLPT + vaultAddress__accruedStrategistFees0 + vaultAddress__accruedStrategistFees1 + vaultAddress__fees0 + vaultAddress__fees1 + vaultAddress__beaconName + vaultAddress__gasUsed + vaultAddress__gasDeposited + vaultAddress__totalLPTokensIssued + vaultAddress__token1Symbol + vaultAddress__decimals + vaultAddress__feeTier + vaultAddress__name + vaultAddress__symbol + vaultAddress__token0Balance + vaultAddress__token0Decimals + vaultAddress__token0Name + vaultAddress__token0Symbol + vaultAddress__token1Balance + vaultAddress__token1Decimals + vaultAddress__token1Name + vaultAddress__payloadIpfs + vaultAddress__vaultManager + vaultAddress__averageFeeArrPerSecond + vaultAddress__totalSnapshots + vaultAddress__annualFeeARR + vaultAddress__dailyFeeAPR + vaultAddress__weeklyFeeAPR + vaultAddress__totalValueLockedToken0 + vaultAddress__totalValueLockedToken1 + jobHash + gasUsed +} + +input Job_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + name: String + name_not: String + name_gt: String + name_lt: String + name_gte: String + name_lte: String + name_in: [String!] + name_not_in: [String!] + name_starts_with: String + name_starts_with_nocase: String + name_not_starts_with: String + name_not_starts_with_nocase: String + name_ends_with: String + name_ends_with_nocase: String + name_not_ends_with: String + name_not_ends_with_nocase: String + name_contains: String + name_not_contains: String + name_contains_nocase: String + name_not_contains_nocase: String + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + jobInfo: [String!] + jobInfo_not: [String!] + jobInfo_contains: [String!] + jobInfo_not_contains: [String!] + jobInfo_contains_nocase: [String!] + jobInfo_not_contains_nocase: [String!] + targetAddresses: [String!] + targetAddresses_not: [String!] + targetAddresses_contains: [String!] + targetAddresses_not_contains: [String!] + targetAddresses_contains_nocase: [String!] + targetAddresses_not_contains_nocase: [String!] + ipfsHash: String + ipfsHash_not: String + ipfsHash_gt: String + ipfsHash_lt: String + ipfsHash_gte: String + ipfsHash_lte: String + ipfsHash_in: [String!] + ipfsHash_not_in: [String!] + ipfsHash_starts_with: String + ipfsHash_starts_with_nocase: String + ipfsHash_not_starts_with: String + ipfsHash_not_starts_with_nocase: String + ipfsHash_ends_with: String + ipfsHash_ends_with_nocase: String + ipfsHash_not_ends_with: String + ipfsHash_not_ends_with_nocase: String + ipfsHash_contains: String + ipfsHash_not_contains: String + ipfsHash_contains_nocase: String + ipfsHash_not_contains_nocase: String + executions_: JobExecution_filter + status: BigInt + status_not: BigInt + status_gt: BigInt + status_lt: BigInt + status_gte: BigInt + status_lte: BigInt + status_in: [BigInt!] + status_not_in: [BigInt!] + failedCounts: BigInt + failedCounts_not: BigInt + failedCounts_gt: BigInt + failedCounts_lt: BigInt + failedCounts_gte: BigInt + failedCounts_lte: BigInt + failedCounts_in: [BigInt!] + failedCounts_not_in: [BigInt!] + vaultAddress: String + vaultAddress_not: String + vaultAddress_gt: String + vaultAddress_lt: String + vaultAddress_gte: String + vaultAddress_lte: String + vaultAddress_in: [String!] + vaultAddress_not_in: [String!] + vaultAddress_starts_with: String + vaultAddress_starts_with_nocase: String + vaultAddress_not_starts_with: String + vaultAddress_not_starts_with_nocase: String + vaultAddress_ends_with: String + vaultAddress_ends_with_nocase: String + vaultAddress_not_ends_with: String + vaultAddress_not_ends_with_nocase: String + vaultAddress_contains: String + vaultAddress_not_contains: String + vaultAddress_contains_nocase: String + vaultAddress_not_contains_nocase: String + vaultAddress_: Vault_filter + jobHash: String + jobHash_not: String + jobHash_gt: String + jobHash_lt: String + jobHash_gte: String + jobHash_lte: String + jobHash_in: [String!] + jobHash_not_in: [String!] + jobHash_starts_with: String + jobHash_starts_with_nocase: String + jobHash_not_starts_with: String + jobHash_not_starts_with_nocase: String + jobHash_ends_with: String + jobHash_ends_with_nocase: String + jobHash_not_ends_with: String + jobHash_not_ends_with_nocase: String + jobHash_contains: String + jobHash_not_contains: String + jobHash_contains_nocase: String + jobHash_not_contains_nocase: String + gasUsed: BigInt + gasUsed_not: BigInt + gasUsed_gt: BigInt + gasUsed_lt: BigInt + gasUsed_gte: BigInt + gasUsed_lte: BigInt + gasUsed_in: [BigInt!] + gasUsed_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [Job_filter] + or: [Job_filter] +} + +enum JobExecution_orderBy { + id + timestamp + jobHash + executor + status + jobIdString + jobId + jobId__id + jobId__name + jobId__timestamp + jobId__ipfsHash + jobId__status + jobId__failedCounts + jobId__jobHash + jobId__gasUsed +} + +input JobExecution_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + jobHash: String + jobHash_not: String + jobHash_gt: String + jobHash_lt: String + jobHash_gte: String + jobHash_lte: String + jobHash_in: [String!] + jobHash_not_in: [String!] + jobHash_starts_with: String + jobHash_starts_with_nocase: String + jobHash_not_starts_with: String + jobHash_not_starts_with_nocase: String + jobHash_ends_with: String + jobHash_ends_with_nocase: String + jobHash_not_ends_with: String + jobHash_not_ends_with_nocase: String + jobHash_contains: String + jobHash_not_contains: String + jobHash_contains_nocase: String + jobHash_not_contains_nocase: String + executor: String + executor_not: String + executor_gt: String + executor_lt: String + executor_gte: String + executor_lte: String + executor_in: [String!] + executor_not_in: [String!] + executor_starts_with: String + executor_starts_with_nocase: String + executor_not_starts_with: String + executor_not_starts_with_nocase: String + executor_ends_with: String + executor_ends_with_nocase: String + executor_not_ends_with: String + executor_not_ends_with_nocase: String + executor_contains: String + executor_not_contains: String + executor_contains_nocase: String + executor_not_contains_nocase: String + status: String + status_not: String + status_gt: String + status_lt: String + status_gte: String + status_lte: String + status_in: [String!] + status_not_in: [String!] + status_starts_with: String + status_starts_with_nocase: String + status_not_starts_with: String + status_not_starts_with_nocase: String + status_ends_with: String + status_ends_with_nocase: String + status_not_ends_with: String + status_not_ends_with_nocase: String + status_contains: String + status_not_contains: String + status_contains_nocase: String + status_not_contains_nocase: String + jobIdString: String + jobIdString_not: String + jobIdString_gt: String + jobIdString_lt: String + jobIdString_gte: String + jobIdString_lte: String + jobIdString_in: [String!] + jobIdString_not_in: [String!] + jobIdString_starts_with: String + jobIdString_starts_with_nocase: String + jobIdString_not_starts_with: String + jobIdString_not_starts_with_nocase: String + jobIdString_ends_with: String + jobIdString_ends_with_nocase: String + jobIdString_not_ends_with: String + jobIdString_not_ends_with_nocase: String + jobIdString_contains: String + jobIdString_not_contains: String + jobIdString_contains_nocase: String + jobIdString_not_contains_nocase: String + jobId: String + jobId_not: String + jobId_gt: String + jobId_lt: String + jobId_gte: String + jobId_lte: String + jobId_in: [String!] + jobId_not_in: [String!] + jobId_starts_with: String + jobId_starts_with_nocase: String + jobId_not_starts_with: String + jobId_not_starts_with_nocase: String + jobId_ends_with: String + jobId_ends_with_nocase: String + jobId_not_ends_with: String + jobId_not_ends_with_nocase: String + jobId_contains: String + jobId_not_contains: String + jobId_contains_nocase: String + jobId_not_contains_nocase: String + jobId_: Job_filter + _change_block: BlockChangedFilter + and: [JobExecution_filter] + or: [JobExecution_filter] +} + +enum JobGasDeposited_orderBy { + id + timestamp + creator + amount +} + +input JobGasDeposited_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + creator: String + creator_not: String + creator_gt: String + creator_lt: String + creator_gte: String + creator_lte: String + creator_in: [String!] + creator_not_in: [String!] + creator_starts_with: String + creator_starts_with_nocase: String + creator_not_starts_with: String + creator_not_starts_with_nocase: String + creator_ends_with: String + creator_ends_with_nocase: String + creator_not_ends_with: String + creator_not_ends_with_nocase: String + creator_contains: String + creator_not_contains: String + creator_contains_nocase: String + creator_not_contains_nocase: String + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [JobGasDeposited_filter] + or: [JobGasDeposited_filter] +} + +enum JobGasWithdrawn_orderBy { + id + timestamp + creator + amount +} + +input JobGasWithdrawn_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + creator: String + creator_not: String + creator_gt: String + creator_lt: String + creator_gte: String + creator_lte: String + creator_in: [String!] + creator_not_in: [String!] + creator_starts_with: String + creator_starts_with_nocase: String + creator_not_starts_with: String + creator_not_starts_with_nocase: String + creator_ends_with: String + creator_ends_with_nocase: String + creator_not_ends_with: String + creator_not_ends_with_nocase: String + creator_contains: String + creator_not_contains: String + creator_contains_nocase: String + creator_not_contains_nocase: String + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [JobGasWithdrawn_filter] + or: [JobGasWithdrawn_filter] +} + +enum VaultGasUsed_orderBy { + id + timestamp + vault + actionHash + amount +} + +input VaultGasUsed_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + actionHash: String + actionHash_not: String + actionHash_gt: String + actionHash_lt: String + actionHash_gte: String + actionHash_lte: String + actionHash_in: [String!] + actionHash_not_in: [String!] + actionHash_starts_with: String + actionHash_starts_with_nocase: String + actionHash_not_starts_with: String + actionHash_not_starts_with_nocase: String + actionHash_ends_with: String + actionHash_ends_with_nocase: String + actionHash_not_ends_with: String + actionHash_not_ends_with_nocase: String + actionHash_contains: String + actionHash_not_contains: String + actionHash_contains_nocase: String + actionHash_not_contains_nocase: String + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultGasUsed_filter] + or: [VaultGasUsed_filter] +} + +enum VaultGasDeposited_orderBy { + id + timestamp + vault + origin + amount +} + +input VaultGasDeposited_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + origin: String + origin_not: String + origin_gt: String + origin_lt: String + origin_gte: String + origin_lte: String + origin_in: [String!] + origin_not_in: [String!] + origin_starts_with: String + origin_starts_with_nocase: String + origin_not_starts_with: String + origin_not_starts_with_nocase: String + origin_ends_with: String + origin_ends_with_nocase: String + origin_not_ends_with: String + origin_not_ends_with_nocase: String + origin_contains: String + origin_not_contains: String + origin_contains_nocase: String + origin_not_contains_nocase: String + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultGasDeposited_filter] + or: [VaultGasDeposited_filter] +} + +enum VaultGasWithdrawn_orderBy { + id + timestamp + vault + to + amount +} + +input VaultGasWithdrawn_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + to: String + to_not: String + to_gt: String + to_lt: String + to_gte: String + to_lte: String + to_in: [String!] + to_not_in: [String!] + to_starts_with: String + to_starts_with_nocase: String + to_not_starts_with: String + to_not_starts_with_nocase: String + to_ends_with: String + to_ends_with_nocase: String + to_not_ends_with: String + to_not_ends_with_nocase: String + to_contains: String + to_not_contains: String + to_contains_nocase: String + to_not_contains_nocase: String + amount: BigInt + amount_not: BigInt + amount_gt: BigInt + amount_lt: BigInt + amount_gte: BigInt + amount_lte: BigInt + amount_in: [BigInt!] + amount_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultGasWithdrawn_filter] + or: [VaultGasWithdrawn_filter] +} + +enum WhiteListManager_orderBy { + id + address + vault + timestamp + permission + permission__id + permission__timestamp + permission__updatedTimestamp +} + +input WhiteListManager_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + address: String + address_not: String + address_gt: String + address_lt: String + address_gte: String + address_lte: String + address_in: [String!] + address_not_in: [String!] + address_starts_with: String + address_starts_with_nocase: String + address_not_starts_with: String + address_not_starts_with_nocase: String + address_ends_with: String + address_ends_with_nocase: String + address_not_ends_with: String + address_not_ends_with_nocase: String + address_contains: String + address_not_contains: String + address_contains_nocase: String + address_not_contains_nocase: String + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + permission_gt: String + permission_lt: String + permission_gte: String + permission_lte: String + permission_in: [String!] + permission_not_in: [String!] + permission_starts_with: String + permission_starts_with_nocase: String + permission_not_starts_with: String + permission_not_starts_with_nocase: String + permission_ends_with: String + permission_ends_with_nocase: String + permission_not_ends_with: String + permission_not_ends_with_nocase: String + permission_: WhiteListVaultPermission_filter + _change_block: BlockChangedFilter + and: [WhiteListManager_filter] + or: [WhiteListManager_filter] +} + +enum WhiteListVaultPermission_orderBy { + id + manager + manager__id + manager__address + manager__vault + manager__timestamp + vault + vault__id + vault__deployer + vault__token0 + vault__token1 + vault__totalAmount0 + vault__totalAmount1 + vault__createdAt + vault__lastSnapshot + vault__pool + vault__state + vault__annualPercentageYield + vault__annualPercentageDailyYield + vault__annualPercentageMonthlyYield + vault__annualPercentageYearlyYield + vault__lastTotalT0ValuePerLPT + vault__accruedStrategistFees0 + vault__accruedStrategistFees1 + vault__fees0 + vault__fees1 + vault__beaconName + vault__gasUsed + vault__gasDeposited + vault__totalLPTokensIssued + vault__token1Symbol + vault__decimals + vault__feeTier + vault__name + vault__symbol + vault__token0Balance + vault__token0Decimals + vault__token0Name + vault__token0Symbol + vault__token1Balance + vault__token1Decimals + vault__token1Name + vault__payloadIpfs + vault__vaultManager + vault__averageFeeArrPerSecond + vault__totalSnapshots + vault__annualFeeARR + vault__dailyFeeAPR + vault__weeklyFeeAPR + vault__totalValueLockedToken0 + vault__totalValueLockedToken1 + addresses + timestamp + updatedTimestamp +} + +input WhiteListVaultPermission_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + manager: String + manager_not: String + manager_gt: String + manager_lt: String + manager_gte: String + manager_lte: String + manager_in: [String!] + manager_not_in: [String!] + manager_starts_with: String + manager_starts_with_nocase: String + manager_not_starts_with: String + manager_not_starts_with_nocase: String + manager_ends_with: String + manager_ends_with_nocase: String + manager_not_ends_with: String + manager_not_ends_with_nocase: String + manager_contains: String + manager_not_contains: String + manager_contains_nocase: String + manager_not_contains_nocase: String + manager_: WhiteListManager_filter + vault: String + vault_not: String + vault_gt: String + vault_lt: String + vault_gte: String + vault_lte: String + vault_in: [String!] + vault_not_in: [String!] + vault_starts_with: String + vault_starts_with_nocase: String + vault_not_starts_with: String + vault_not_starts_with_nocase: String + vault_ends_with: String + vault_ends_with_nocase: String + vault_not_ends_with: String + vault_not_ends_with_nocase: String + vault_contains: String + vault_not_contains: String + vault_contains_nocase: String + vault_not_contains_nocase: String + vault_: Vault_filter + addresses: [String!] + addresses_not: [String!] + addresses_contains: [String!] + addresses_not_contains: [String!] + addresses_contains_nocase: [String!] + addresses_not_contains_nocase: [String!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + updatedTimestamp: BigInt + updatedTimestamp_not: BigInt + updatedTimestamp_gt: BigInt + updatedTimestamp_lt: BigInt + updatedTimestamp_gte: BigInt + updatedTimestamp_lte: BigInt + updatedTimestamp_in: [BigInt!] + updatedTimestamp_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [WhiteListVaultPermission_filter] + or: [WhiteListVaultPermission_filter] +} + +enum LeaderBoard_orderBy { + id + address + numStaticJobs + numApps + timestamp +} + +input LeaderBoard_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + address: String + address_not: String + address_gt: String + address_lt: String + address_gte: String + address_lte: String + address_in: [String!] + address_not_in: [String!] + address_starts_with: String + address_starts_with_nocase: String + address_not_starts_with: String + address_not_starts_with_nocase: String + address_ends_with: String + address_ends_with_nocase: String + address_not_ends_with: String + address_not_ends_with_nocase: String + address_contains: String + address_not_contains: String + address_contains_nocase: String + address_not_contains_nocase: String + numStaticJobs: BigInt + numStaticJobs_not: BigInt + numStaticJobs_gt: BigInt + numStaticJobs_lt: BigInt + numStaticJobs_gte: BigInt + numStaticJobs_lte: BigInt + numStaticJobs_in: [BigInt!] + numStaticJobs_not_in: [BigInt!] + numApps: BigInt + numApps_not: BigInt + numApps_gt: BigInt + numApps_lt: BigInt + numApps_gte: BigInt + numApps_lte: BigInt + numApps_in: [BigInt!] + numApps_not_in: [BigInt!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [LeaderBoard_filter] + or: [LeaderBoard_filter] +} + +enum VaultTransfer_orderBy { + id + from + to + value + timestamp + blockNumber +} + +input VaultTransfer_filter { + id: ID + id_not: ID + id_gt: ID + id_lt: ID + id_gte: ID + id_lte: ID + id_in: [ID!] + id_not_in: [ID!] + from: String + from_not: String + from_gt: String + from_lt: String + from_gte: String + from_lte: String + from_in: [String!] + from_not_in: [String!] + from_starts_with: String + from_starts_with_nocase: String + from_not_starts_with: String + from_not_starts_with_nocase: String + from_ends_with: String + from_ends_with_nocase: String + from_not_ends_with: String + from_not_ends_with_nocase: String + from_contains: String + from_not_contains: String + from_contains_nocase: String + from_not_contains_nocase: String + to: String + to_not: String + to_gt: String + to_lt: String + to_gte: String + to_lte: String + to_in: [String!] + to_not_in: [String!] + to_starts_with: String + to_starts_with_nocase: String + to_not_starts_with: String + to_not_starts_with_nocase: String + to_ends_with: String + to_ends_with_nocase: String + to_not_ends_with: String + to_not_ends_with_nocase: String + to_contains: String + to_not_contains: String + to_contains_nocase: String + to_not_contains_nocase: String + value: BigInt + value_not: BigInt + value_gt: BigInt + value_lt: BigInt + value_gte: BigInt + value_lte: BigInt + value_in: [BigInt!] + value_not_in: [BigInt!] + timestamp: BigInt + timestamp_not: BigInt + timestamp_gt: BigInt + timestamp_lt: BigInt + timestamp_gte: BigInt + timestamp_lte: BigInt + timestamp_in: [BigInt!] + timestamp_not_in: [BigInt!] + blockNumber: BigInt + blockNumber_not: BigInt + blockNumber_gt: BigInt + blockNumber_lt: BigInt + blockNumber_gte: BigInt + blockNumber_lte: BigInt + blockNumber_in: [BigInt!] + blockNumber_not_in: [BigInt!] + _change_block: BlockChangedFilter + and: [VaultTransfer_filter] + or: [VaultTransfer_filter] +} + +type _MetaBlock_ { + hash: Bytes + number: Int! + timestamp: Int +} + +type _Meta_ { + block: _MetaBlock_! + deployment: String! + hasIndexingErrors: Boolean! +} + +type ResultState { + block: _Block_! + contractAddress: String! + cid: String! + kind: String! + data: String! +} + +type SyncStatus { + latestIndexedBlockHash: String! + latestIndexedBlockNumber: Int! + latestCanonicalBlockHash: String! + latestCanonicalBlockNumber: Int! + initialIndexedBlockHash: String! + initialIndexedBlockNumber: Int! + latestProcessedBlockHash: String! + latestProcessedBlockNumber: Int! +} + +type Query { + events(blockHash: String!, contractAddress: String!, name: String): [ResultEvent!] + eventsInRange(fromBlockNumber: Int!, toBlockNumber: Int!): [ResultEvent!] + keeper(id: ID!, block: Block_height): Keeper + keepers(block: Block_height, where: Keeper_filter, orderBy: Keeper_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Keeper!]! + runner(id: ID!, block: Block_height): Runner + runners(block: Block_height, where: Runner_filter, orderBy: Runner_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Runner!]! + queueTimeline(id: ID!, block: Block_height): QueueTimeline + queueTimelines(block: Block_height, where: QueueTimeline_filter, orderBy: QueueTimeline_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [QueueTimeline!]! + permissionUpdate(id: ID!, block: Block_height): PermissionUpdate + permissionUpdates(block: Block_height, where: PermissionUpdate_filter, orderBy: PermissionUpdate_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PermissionUpdate!]! + orchestratorAction(id: ID!, block: Block_height): OrchestratorAction + orchestratorActions(block: Block_height, where: OrchestratorAction_filter, orderBy: OrchestratorAction_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [OrchestratorAction!]! + vote(id: ID!, block: Block_height): Vote + votes(block: Block_height, where: Vote_filter, orderBy: Vote_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Vote!]! + actionFailure(id: ID!, block: Block_height): ActionFailure + actionFailures(block: Block_height, where: ActionFailure_filter, orderBy: ActionFailure_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [ActionFailure!]! + creator(id: ID!, block: Block_height): Creator + creators(block: Block_height, where: Creator_filter, orderBy: Creator_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Creator!]! + creatorWithdrawal(id: ID!, block: Block_height): CreatorWithdrawal + creatorWithdrawals(block: Block_height, where: CreatorWithdrawal_filter, orderBy: CreatorWithdrawal_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [CreatorWithdrawal!]! + strategy(id: ID!, block: Block_height): Strategy + strategies(block: Block_height, where: Strategy_filter, orderBy: Strategy_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Strategy!]! + vault(id: ID!, block: Block_height): Vault + vaults(block: Block_height, where: Vault_filter, orderBy: Vault_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Vault!]! + vaultSnapshot(id: ID!, block: Block_height): VaultSnapshot + vaultSnapshots(block: Block_height, where: VaultSnapshot_filter, orderBy: VaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultSnapshot!]! + prevVaultSnapshot(id: ID!, block: Block_height): PrevVaultSnapshot + prevVaultSnapshots(block: Block_height, where: PrevVaultSnapshot_filter, orderBy: PrevVaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PrevVaultSnapshot!]! + prevDailyVaultSnapshot(id: ID!, block: Block_height): PrevDailyVaultSnapshot + prevDailyVaultSnapshots(block: Block_height, where: PrevDailyVaultSnapshot_filter, orderBy: PrevDailyVaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PrevDailyVaultSnapshot!]! + prevMonthlyVaultSnapshot(id: ID!, block: Block_height): PrevMonthlyVaultSnapshot + prevMonthlyVaultSnapshots(block: Block_height, where: PrevMonthlyVaultSnapshot_filter, orderBy: PrevMonthlyVaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PrevMonthlyVaultSnapshot!]! + prevAnnualVaultSnapshot(id: ID!, block: Block_height): PrevAnnualVaultSnapshot + prevAnnualVaultSnapshots(block: Block_height, where: PrevAnnualVaultSnapshot_filter, orderBy: PrevAnnualVaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PrevAnnualVaultSnapshot!]! + prevWeeklyVaultSnapshot(id: ID!, block: Block_height): PrevWeeklyVaultSnapshot + prevWeeklyVaultSnapshots(block: Block_height, where: PrevWeeklyVaultSnapshot_filter, orderBy: PrevWeeklyVaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PrevWeeklyVaultSnapshot!]! + vaultStateChanged(id: ID!, block: Block_height): VaultStateChanged + vaultStateChangeds(block: Block_height, where: VaultStateChanged_filter, orderBy: VaultStateChanged_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultStateChanged!]! + vaultDeposit(id: ID!, block: Block_height): VaultDeposit + vaultDeposits(block: Block_height, where: VaultDeposit_filter, orderBy: VaultDeposit_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultDeposit!]! + vaultWithdraw(id: ID!, block: Block_height): VaultWithdraw + vaultWithdraws(block: Block_height, where: VaultWithdraw_filter, orderBy: VaultWithdraw_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultWithdraw!]! + depositor(id: ID!, block: Block_height): Depositor + depositors(block: Block_height, where: Depositor_filter, orderBy: Depositor_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Depositor!]! + vaultBeacon(id: ID!, block: Block_height): VaultBeacon + vaultBeacons(block: Block_height, where: VaultBeacon_filter, orderBy: VaultBeacon_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultBeacon!]! + vaultPosition(id: ID!, block: Block_height): VaultPosition + vaultPositions(block: Block_height, where: VaultPosition_filter, orderBy: VaultPosition_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultPosition!]! + liquiditySteer(id: ID!, block: Block_height): LiquiditySteer + liquiditySteers(block: Block_height, where: LiquiditySteer_filter, orderBy: LiquiditySteer_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [LiquiditySteer!]! + orchestratorReward(id: ID!, block: Block_height): OrchestratorReward + orchestratorRewards(block: Block_height, where: OrchestratorReward_filter, orderBy: OrchestratorReward_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [OrchestratorReward!]! + orchestratorRewardTracker(id: ID!, block: Block_height): OrchestratorRewardTracker + orchestratorRewardTrackers(block: Block_height, where: OrchestratorRewardTracker_filter, orderBy: OrchestratorRewardTracker_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [OrchestratorRewardTracker!]! + orchestratorRewardSnapshot(id: ID!, block: Block_height): OrchestratorRewardSnapshot + orchestratorRewardSnapshots(block: Block_height, where: OrchestratorRewardSnapshot_filter, orderBy: OrchestratorRewardSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [OrchestratorRewardSnapshot!]! + bundle(id: ID!, block: Block_height): Bundle + bundles(block: Block_height, where: Bundle_filter, orderBy: Bundle_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Bundle!]! + job(id: ID!, block: Block_height): Job + jobs(block: Block_height, where: Job_filter, orderBy: Job_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Job!]! + jobExecution(id: ID!, block: Block_height): JobExecution + jobExecutions(block: Block_height, where: JobExecution_filter, orderBy: JobExecution_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [JobExecution!]! + jobGasDeposited(id: ID!, block: Block_height): JobGasDeposited + jobGasDepositeds(block: Block_height, where: JobGasDeposited_filter, orderBy: JobGasDeposited_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [JobGasDeposited!]! + jobGasWithdrawn(id: ID!, block: Block_height): JobGasWithdrawn + jobGasWithdrawns(block: Block_height, where: JobGasWithdrawn_filter, orderBy: JobGasWithdrawn_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [JobGasWithdrawn!]! + vaultGasUsed(id: ID!, block: Block_height): VaultGasUsed + vaultGasUseds(block: Block_height, where: VaultGasUsed_filter, orderBy: VaultGasUsed_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultGasUsed!]! + vaultGasDeposited(id: ID!, block: Block_height): VaultGasDeposited + vaultGasDepositeds(block: Block_height, where: VaultGasDeposited_filter, orderBy: VaultGasDeposited_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultGasDeposited!]! + vaultGasWithdrawn(id: ID!, block: Block_height): VaultGasWithdrawn + vaultGasWithdrawns(block: Block_height, where: VaultGasWithdrawn_filter, orderBy: VaultGasWithdrawn_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultGasWithdrawn!]! + whiteListManager(id: ID!, block: Block_height): WhiteListManager + whiteListManagers(block: Block_height, where: WhiteListManager_filter, orderBy: WhiteListManager_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [WhiteListManager!]! + whiteListVaultPermission(id: ID!, block: Block_height): WhiteListVaultPermission + whiteListVaultPermissions(block: Block_height, where: WhiteListVaultPermission_filter, orderBy: WhiteListVaultPermission_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [WhiteListVaultPermission!]! + leaderBoard(id: ID!, block: Block_height): LeaderBoard + leaderBoards(block: Block_height, where: LeaderBoard_filter, orderBy: LeaderBoard_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [LeaderBoard!]! + vaultTransfer(id: ID!, block: Block_height): VaultTransfer + vaultTransfers(block: Block_height, where: VaultTransfer_filter, orderBy: VaultTransfer_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultTransfer!]! + _meta(block: Block_height): _Meta_ + getStateByCID(cid: String!): ResultState + getState(blockHash: String!, contractAddress: String!, kind: String): ResultState + getSyncStatus: SyncStatus +} + +type Keeper { + id: ID! + bondHeld: BigDecimal! + index: BigInt! + actions(where: OrchestratorAction_filter, orderBy: OrchestratorAction_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [OrchestratorAction!]! + status: String! + queueTimeline(where: QueueTimeline_filter, orderBy: QueueTimeline_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [QueueTimeline!]! + permissionUpdates(where: PermissionUpdate_filter, orderBy: PermissionUpdate_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [PermissionUpdate!]! +} + +type OrchestratorAction { + id: ID! + timestamp: BigInt! + from: Keeper! + votes(where: Vote_filter, orderBy: Vote_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Vote!]! + lastUpdated: BigInt + state: String! + status: String! + recipients: [String!] + actionFailed(where: ActionFailure_filter, orderBy: ActionFailure_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [ActionFailure!]! + vault: String! + transactionHash: String! + hash: String! + gasUsed: BigInt! +} + +type Vote { + id: ID! + timestamp: BigInt! + by: Keeper! + action: OrchestratorAction! +} + +type ActionFailure { + id: ID! + timeStamp: BigInt! + method: BigInt! + action: OrchestratorAction! +} + +type QueueTimeline { + id: ID! + keeper: Keeper! + timeDelay: BigInt! + queued: Boolean! +} + +type PermissionUpdate { + id: ID! + keeper: Keeper! + timeStamp: BigInt! + action: String! +} + +type Runner { + id: ID! + bondHeld: BigInt! + + """Time when the runner was created""" + createdAt: BigInt! +} + +type Creator { + id: ID! + strategies(where: Strategy_filter, orderBy: Strategy_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Strategy!]! + revenue: BigDecimal! + withdrawals(where: CreatorWithdrawal_filter, orderBy: CreatorWithdrawal_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [CreatorWithdrawal!] + totalValueLocked: BigDecimal! + totalYield: BigDecimal! +} + +type Strategy { + id: ID! + name: String! + vault(where: Vault_filter, orderBy: Vault_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Vault!]! + createdAt: BigInt! + admin: String! + creator: Creator! + executionBundle: String! +} + +type Vault { + id: ID! + deployer: String! + token0: String! + token1: String! + totalAmount0: BigDecimal! + totalAmount1: BigDecimal! + createdAt: BigInt! + lastSnapshot: BigInt! + pool: String! + state: BigInt! + statusUpdates(where: VaultStateChanged_filter, orderBy: VaultStateChanged_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultStateChanged!]! + strategyToken: Strategy! + + """Statistics""" + snapshots(where: VaultSnapshot_filter, orderBy: VaultSnapshot_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultSnapshot!]! + permissions(where: WhiteListVaultPermission_filter, orderBy: WhiteListVaultPermission_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [WhiteListVaultPermission!]! + positions(where: VaultPosition_filter, orderBy: VaultPosition_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [VaultPosition!]! + depositors(where: Depositor_filter, orderBy: Depositor_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Depositor!]! + annualPercentageYield: BigDecimal! + annualPercentageDailyYield: BigDecimal! + annualPercentageMonthlyYield: BigDecimal! + annualPercentageYearlyYield: BigDecimal! + lastTotalT0ValuePerLPT: BigDecimal! + accruedStrategistFees0: BigInt! + accruedStrategistFees1: BigInt! + fees0: BigInt! + fees1: BigInt! + beaconName: String! + jobs(where: Job_filter, orderBy: Job_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [Job!]! + gasUsed: BigInt! + gasDeposited: BigInt! + totalLPTokensIssued: BigInt! + token1Symbol: String! + decimals: BigInt! + feeTier: BigInt! + name: String! + symbol: String! + token0Balance: BigInt! + token0Decimals: BigInt! + token0Name: String! + token0Symbol: String! + token1Balance: BigInt! + token1Decimals: BigInt! + token1Name: String! + payloadIpfs: String! + vaultManager: String! + averageFeeArrPerSecond: BigDecimal! + totalSnapshots: BigInt! + annualFeeARR: BigDecimal! + dailyFeeAPR: BigDecimal! + weeklyFeeAPR: BigDecimal! + totalValueLockedToken0: BigDecimal! + totalValueLockedToken1: BigDecimal! +} + +type VaultStateChanged { + id: ID! + timeStamp: BigInt! + vault: Vault! + status: BigInt! +} + +type VaultSnapshot { + id: ID! + timestamp: BigInt! + vaultAddress: Vault! + totalAmount0: BigInt! + totalAmount1: BigInt! + sqrtPriceX96: BigInt! + totalSupply: BigInt! + fees1: BigInt! + fees0: BigInt! + annualFeeAPR: BigDecimal! + dailyFeeAPR: BigDecimal! + weeklyFeeAPR: BigDecimal! + transactionHash: String! +} + +type WhiteListVaultPermission { + id: ID! + manager: WhiteListManager! + vault: Vault! + addresses: [String!]! + timestamp: BigInt! + updatedTimestamp: BigInt! +} + +type WhiteListManager { + id: ID! + address: String! + vault: String! + timestamp: BigInt! + permission: WhiteListVaultPermission! +} + +type VaultPosition { + id: ID! + upperTick: [BigInt!]! + lowerTick: [BigInt!]! + vault: Vault! + relativeWeight: [BigInt!]! + timestamp: BigInt! +} + +type Depositor { + id: ID! + vault: Vault! + account: String! + executor: String! + depositCaller: String! + depositedAmount0: BigInt! + depositedAmount1: BigInt! + withdrawnAmount0: BigInt! + withdrawnAmount1: BigInt! + liquidityAmount0: BigInt! + liquidityAmount1: BigInt! + createdTimestamp: BigInt! + updatedTimestamp: BigInt! + shares: BigInt! +} + +type Job { + id: ID! + name: String! + timestamp: BigInt! + jobInfo: [String!]! + targetAddresses: [String!]! + ipfsHash: String! + executions(where: JobExecution_filter, orderBy: JobExecution_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [JobExecution!]! + status: BigInt! + failedCounts: BigInt! + vaultAddress: Vault! + jobHash: String! + gasUsed: BigInt! +} + +type JobExecution { + id: ID! + timestamp: BigInt! + jobHash: String! + executor: String! + status: String! + jobIdString: String! + jobId: Job! +} + +type CreatorWithdrawal { + id: ID! + timeStamp: BigInt! + creator: Creator! + amount: BigDecimal! +} + +type PrevVaultSnapshot { + id: ID! + timestamp: BigInt! + vaultAddress: Vault! + totalAmount0: BigInt! + totalAmount1: BigInt! + sqrtPriceX96: BigInt! + totalSupply: BigInt! + fees1: BigInt! + fees0: BigInt! +} + +type PrevDailyVaultSnapshot { + id: ID! + timestamp: BigInt! + vaultAddress: Vault! + totalAmount0: BigInt! + totalAmount1: BigInt! + sqrtPriceX96: BigInt! + totalSupply: BigInt! + fees1: BigInt! + fees0: BigInt! +} + +type PrevMonthlyVaultSnapshot { + id: ID! + timestamp: BigInt! + vaultAddress: Vault! + totalAmount0: BigInt! + totalAmount1: BigInt! + sqrtPriceX96: BigInt! + totalSupply: BigInt! + fees1: BigInt! + fees0: BigInt! +} + +type PrevAnnualVaultSnapshot { + id: ID! + timestamp: BigInt! + vaultAddress: Vault! + totalAmount0: BigInt! + totalAmount1: BigInt! + sqrtPriceX96: BigInt! + totalSupply: BigInt! + fees1: BigInt! + fees0: BigInt! +} + +type PrevWeeklyVaultSnapshot { + id: ID! + timestamp: BigInt! + vaultAddress: Vault! + totalAmount0: BigInt! + totalAmount1: BigInt! + sqrtPriceX96: BigInt! + totalSupply: BigInt! + fees1: BigInt! + fees0: BigInt! + averageFeeArrPerSecond: BigDecimal! + totalSnapshots: BigInt! + weeklyFeeApr: BigDecimal! +} + +type VaultDeposit { + """Address of the depositor""" + id: ID! + vault: Vault! + + """Amount of tokens deposited""" + amount0: BigDecimal! + amount1: BigDecimal! + + """Token Addresses""" + token0: String! + token1: String! + sender: String! + transactionHash: String! + + """Time when the deposit was made""" + timeStamp: BigInt! + shares: BigInt! + executor: String! + depositCaller: String! + blockNumber: BigInt! +} + +type VaultWithdraw { + """Address of the withdrawer""" + id: ID! + vault: Vault! + + """Amount of tokens withdrawn""" + amount0: BigDecimal! + amount1: BigDecimal! + + """Token Addresses""" + token0: String! + token1: String! + + """Time when the withdraw was made""" + timeStamp: BigInt! + shares: BigInt! + sender: String! + transactionHash: String! + blockNumber: BigInt! +} + +type VaultBeacon { + """Address of the VaultBeacon""" + id: ID! + address: String! + + """IPFS Config for Beacon""" + ipfsHash: String! + name: String! + + """Beacon status""" + status: String! + timestamp: BigInt! + updateTimestamp: BigInt! +} + +type LiquiditySteer { + id: ID! + vault: Vault! + timeStamp: BigInt! + tick: BigInt! +} + +type OrchestratorReward { + id: ID! + timeStamp: BigInt! + updatedTimeStamp: BigInt! + address: String! + reward: BigInt! + trackerId: OrchestratorRewardTracker! +} + +type OrchestratorRewardTracker { + id: ID! + timeStamp: BigInt! + rewards(where: OrchestratorReward_filter, orderBy: OrchestratorReward_orderBy, orderDirection: OrderDirection, first: Int = 100, skip: Int = 0): [OrchestratorReward!]! +} + +type OrchestratorRewardSnapshot { + id: ID! + timeStamp: BigInt! + updatedTimeStamp: BigInt! + address: String! + reward: BigInt! +} + +type Bundle { + id: ID! + createdAt: BigInt! + bundle: String! + creator: String! + host: String! + source: String! + output: String! + active: Boolean! + infoHash: String! + hash: String! +} + +type JobGasDeposited { + id: ID! + timestamp: BigInt! + creator: String! + amount: BigInt! +} + +type JobGasWithdrawn { + id: ID! + timestamp: BigInt! + creator: String! + amount: BigInt! +} + +type VaultGasUsed { + id: ID! + timestamp: BigInt! + vault: String! + actionHash: String + amount: BigInt! +} + +type VaultGasDeposited { + id: ID! + timestamp: BigInt! + vault: String! + origin: String! + amount: BigInt! +} + +type VaultGasWithdrawn { + id: ID! + timestamp: BigInt! + vault: String! + to: String! + amount: BigInt! +} + +type LeaderBoard { + id: ID! + address: String! + numStaticJobs: BigInt! + numApps: BigInt! + timestamp: BigInt! +} + +type VaultTransfer { + id: ID! + from: String! + to: String! + value: BigInt! + timestamp: BigInt! + blockNumber: BigInt! +} + +type Mutation { + watchContract(address: String!, kind: String!, checkpoint: Boolean!, startingBlock: Int): Boolean! +} + +type Subscription { + onEvent: ResultEvent! +} diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..679134f --- /dev/null +++ b/src/server.ts @@ -0,0 +1,43 @@ +// +// Copyright 2021 Vulcanize, Inc. +// + +import fs from 'fs'; +import path from 'path'; +import 'reflect-metadata'; +import debug from 'debug'; + +import { ServerCmd } from '@cerc-io/cli'; +import { getGraphDbAndWatcher } from '@cerc-io/graph-node'; + +import { createResolvers } from './resolvers'; +import { Indexer } from './indexer'; +import { Database, ENTITY_QUERY_TYPE_MAP, ENTITY_TO_LATEST_ENTITY_MAP } from './database'; + +const log = debug('vulcanize:server'); + +export const main = async (): Promise => { + const serverCmd = new ServerCmd(); + await serverCmd.init(Database); + + const { graphWatcher } = await getGraphDbAndWatcher( + serverCmd.config.server, + serverCmd.clients.ethClient, + serverCmd.ethProvider, + serverCmd.database.baseDatabase, + ENTITY_QUERY_TYPE_MAP, + ENTITY_TO_LATEST_ENTITY_MAP + ); + + await serverCmd.initIndexer(Indexer, graphWatcher); + + const typeDefs = fs.readFileSync(path.join(__dirname, 'schema.gql')).toString(); + + return serverCmd.exec(createResolvers, typeDefs); +}; + +main().then(() => { + log('Starting server...'); +}).catch(err => { + log(err); +}); diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..c456217 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,3 @@ +// +// Copyright 2021 Vulcanize, Inc. +// diff --git a/subgraph-build/BundleRegistry/BundleRegistry.wasm b/subgraph-build/BundleRegistry/BundleRegistry.wasm new file mode 100644 index 0000000000000000000000000000000000000000..800cc7c12ca815ad02ec902e90c332a29abacadb GIT binary patch literal 186034 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ν@j`=Z=%RA=^;EW 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 literal 0 HcmV?d00001 diff --git a/subgraph-build/BundleRegistry/abis/BundleRegistry.json b/subgraph-build/BundleRegistry/abis/BundleRegistry.json new file mode 100644 index 0000000..a7eb84a --- /dev/null +++ b/subgraph-build/BundleRegistry/abis/BundleRegistry.json @@ -0,0 +1,430 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "bundle", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "host", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "source", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "output", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "infoHash", + "type": "string" + }, + { + "indexed": false, + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "indexed": false, + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "BundleRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bool", + "name": "toggle", + "type": "bool" + } + ], + "name": "BundleStateChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "bundles", + "outputs": [ + { + "internalType": "string", + "name": "bundle", + "type": "string" + }, + { + "internalType": "string", + "name": "source", + "type": "string" + }, + { + "internalType": "string", + "name": "host", + "type": "string" + }, + { + "internalType": "string", + "name": "output", + "type": "string" + }, + { + "internalType": "string", + "name": "info", + "type": "string" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "address", + "name": "author", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_bundle", + "type": "string" + }, + { + "internalType": "string", + "name": "_source", + "type": "string" + }, + { + "internalType": "string", + "name": "_host", + "type": "string" + }, + { + "internalType": "string", + "name": "_output", + "type": "string" + }, + { + "internalType": "string", + "name": "_infoHash", + "type": "string" + }, + { + "internalType": "bool", + "name": "_active", + "type": "bool" + } + ], + "name": "register", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_adapter", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "_remainActive", + "type": "bool" + } + ], + "name": "setAdapterState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } +] \ No newline at end of file diff --git a/subgraph-build/DynamicJob/abis/DynamicJobs.json b/subgraph-build/DynamicJob/abis/DynamicJobs.json new file mode 100644 index 0000000..ce48217 --- /dev/null +++ b/subgraph-build/DynamicJob/abis/DynamicJobs.json @@ -0,0 +1,361 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "executor", + "type": "address" + } + ], + "name": "JobExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes[]", + "name": "jobInfo", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "targetAddresses", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "ipfsForJobDetails", + "type": "string" + } + ], + "name": "JobRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "toggle", + "type": "uint256" + } + ], + "name": "JobToggledByCreator", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "creator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_targetAddresses", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "_userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "bytes[]", + "name": "_strategyProvidedData", + "type": "bytes[]" + } + ], + "name": "executeJob", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "gasBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "jobState", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "keeperRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "orchestrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "address[]", + "name": "_targetAddresses", + "type": "address[]" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsForJobDetails", + "type": "string" + } + ], + "name": "registerJob", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "_userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "address[]", + "name": "_targetAddresses", + "type": "address[]" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsForJobDetails", + "type": "string" + } + ], + "name": "registerJobAndDepositGas", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_jobHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_toggle", + "type": "uint256" + } + ], + "name": "setJobState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + } + ], + "name": "withdrawGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/subgraph-build/GasVault/GasVault.wasm b/subgraph-build/GasVault/GasVault.wasm new file mode 100644 index 0000000000000000000000000000000000000000..279c2abc9363ff1aa424c511246be0f9cc72318a GIT binary patch literal 196272 zcmeEv37lL-o&P&}rswLUb3tGNba$d89N`X!2zh}F30GJScXju_I3%4glVm2$bP!yZ z1mzSDR76o%*18inx56aN@sb)A8YYzm z0j8zvhAtgiS6{c{a@YHrUO@!`zmRE7V`y_7eKtvRy+S#4&hV1AjK08?o2A>~cg`E! zeOnB!Ac6U|8HP-g_SRL~=IExokN4;tn@88Vm!`Ihh8k4-nh6vR^Ph0WFD5T9o)1j2yDVUn?Q6O+)#hc;HIth zAo4)fp8?gl;6Lc)h-HVT2xdVhqoyl^T3(eca;_L0uOD+<5X3)@ei#+Vf8scd!Z3_t z1VM~9v-`VF%s>l9LZi?8N__CH^2cW7HL*IRE&=|HssB{KM-R z#hD$f2LB4EFG5Nu{-KU^DKy3YLvz$8R2KD~P1OGiQe9AxPvZkI@)i7lvrSHk=akEH z=S6!(MNn)Qb`?;4jQ{zc)WD|jOX!aDnEm1J?7t|8q6jrGh{Ga(L;}!`9`#>Wp%88f z3g~YTcHY-@H<)x1^ll4O5b`Nv5Hlz+=wQ&vpva($K{o>_HmMRlEY{1Qk3osS3~26GwAW3U&4y&24Bun&WM8T2z)z+gWH`!hIzL4`q;L5;ye28$RxgTXTy z9LQiXgCz_OVsJ2nLl_*&U@3#c7#z;v2nI(oIEum1431&2jKQ%Cj$?2~&q?@s3GbEg zJ_)}d;TI+Rl7#n5_+<%yBqRG{2_Kg55edI3WA!Zwzb)Z+Bz!=^?@IWfgbzvhJqf=r z;SVJIp@ct@@W&E9Ea4*({zSr`O87Gge=gyp68=KMUrP8Z34bl&ZzTL*34bf$?;dVj4Dw>?St=^nAIDTq<%joz}124~WFaL6= zaq+sb!554K7nIJ2wzhiRQYA*>-r4$hGB!4N`HHRU*Vo75zOsG^&Eq&ph)c8Ft0R`F zcQd?qM;)o&&Ggl6+)97HsWSy6K zYx3@8KEJ~1Xz|{rhtk3oqobSR`Fr`0@S3{MK7N7#9V&nb_ITe^q4TJss)YV|excK$ zYpVAPOmF1FdJy(Y)w1%^`bguP!Lh;3@&1ebTKK%~tidfSM;c?7tD>&r1D5P0tJk>7 ze4Y2a&4XhNsP2ui!L^N3pvuHm11zrjT=WM-b)6iPf z8lUdJb}c-k>UD5n>xk4rUf`M$pJ|AL9~#)YX;UI?^>Uo$SFTd|&9exA?D z7ANc0p%*&k0w4QMt#7I~>Mrp)es@%2x;uYqIJz4|!RsxJ_^y|Zm!3F?WZ=O?BDp^7kQvD^8fiCv?#7f;cxvy zJ{n(WST_5nq|5XDvC$o+j$@iPXujh~Dg%#;di1!SIl3WUYw8wuunP93cwLI2FjL)R zI%RZx^XPaoa(TSo5WIdx<%#b%nDO=Aub@3FzSwlnOF3n9Xe1sopiCuf-aOO*6~)6j z6)O3((XbA$oTMZTSQIYW+Nj5y3{Iu8z>YMswjOWJNjz(GU48Y)`q6mAuu88aiMl=} z$)h=C&%aEGk9bQ?hwNC#ml%fN)ofEQ*aF^IkH<35-P*WVK09vI0##PwLc{O|@8#-K zXBTx9sn08g*4GPTjf%%ohNA&S;~)lJ-H4 z>lJC>ow{{wP!zRoY2Ya&+8(9{D}z8+hUu0{GKFUR;=B~LBYsJkZh&prRiU9u)qIn1 z=FoT}zPhO)syn*p*Mw;r9H`ghYs2)QXdZK2m80T_ zQvjBvQ#K7j9|utluH9&w9N&=Xq$Qk}g=x|-31>kE8;W0^>7_|M4;JuE_4pN;!svYC zym~`-?3EdiJK1|e{P9BSO+yAWW$IoPSyT>d-LNbdHrH z>r@r5$&4TQ0Xrb{bW=`ZeVuOkYcn4gPO|Q-@ePEw6u&t$C?2nQU8dXT)1ciL+`J`z zeFiDcAKDV%k{NwZ00`c`AvEk=^%5O_V+N1Tzih?my36A?Wro=Dw|~eq$a1gv&6$te z6ph7i$pFcwW02!p!!$$p6BS<^kN>gN2Q=gSrwjr;N3GE4&;PUSXfpPK`rxH?HLh>9 zNU2|+Gd4Q9e$9HNXT@&|4L{V$=MQd(|HZ<Jc?v2Y-E7n2+rs&oR|1rcScwbP zHzg4slC-cXiJ*k!9t<`#C9#ww9luxhTSMb#L)i~5Zc1p3a_Sij&C8Zh%XPy!@40BV zG3Py(?lv_w3Lj7lc$;&Q)YLo}*}M7cf}_D`PN6jy4P$;3Z0XMy^0B18PbO8?3RR^S z?wgmUt9^cM;@Pqa8VqK?DYX)U^}&(gqTHgok886%k)kpx>w1VMTBUn;D43{z365NN zsVrK__kvoRRotLg1ZsirYElb~9& zHTzmseyLxLKOUF#c-DdUg!9}lX~Vjq4MPp^2LHXFvwFX9b|!!QvMs@w|B{*c^5ng| zoPGl?o8u+e#orf)sn=teHIuPj6VCK<%Zl%{VcC177M5S=zfw!B*M&2@Y*=Rvu1~$; z;^s@kSzey{C0hqKjR!ZRS~4=)SjqRn%fgbEcT*#HdFsW6M(~Q%i%s?5m8lmS>cNev z7L3$41h4i7z+Xjwf!FV)FRYJ^2A6wKUWy6nmcg-laAnwuR>5Q)-!6T@lMLfUV$=?v zJ6ENup#`(Tv=g2TV;o(Z6;rh{>mwT)7YBcreZOY?dW>iA#*p7;0e>K0mHOf)T}8Lf zIoJr^B!kCdLnCW9ZCwYM^KisbQLo_nux5SmNM!1U5vZ}6{t$Tklc-ncTR#ML`BVFI zoSqmzkNR}#I3@%2;L(WCVy)v_FB;@@Bltzcp;b-Zayg~w&`9vhh{(^En+LZ9|0Ki1 zU-(9&J{J75V3v9@vQC;3yfri+Tn`CxrfFjEw$LjD$^V!A0dn7Ne}L5AXMcdqKWaZh690e&lk(cwVLz(fH9lt1&iQG4+&12G(D;O{ zm(1%9gHXaY2+09WTk?V<_S$q7jM3{-Z#ZhV7zisaa~jz;#!&GhT0h`_16xk8QqzGX zSZoVc&iC?PFf#6yxXJWE)umjX-e4PGSlHk1Th|^YOGSY_19Y}DIrY?YSDtrX9PXc! zII#M!R-Ss{iszoc^1L{jpOZl)#e3x>tv>twxUhFl!Uas}$V*wVX3d##=RP@Q&O86y z)n}g;7h5+nIrrS;xp7xsBUMs&Uefs&oO9;NxMxQClkvZYndS*wSDI@!g<@DKuGti) zw`NmB&Qqg3J~JdKwtr_hE8VVzpp0)fy#$4PC(LvXi~;uFG1%mT)y+vpdwU?v3>^81 z;NUrPGhbGW>bp&FvAXV=**;p9_+ZXglvessPRjW(JJo~lh5I!%K(|^I{bAVOoPkYO z$v@61uK}VmJRB})DzCV+O8-fiK|_EBl&=zhmQz>}r%Hb`%nYm0r5TXBa#PKi+?^dt z%Lc}SPiA{1X#+!-8P@TsEI=g#Io7Ac1JeDK6lE$=O%Lt~t2tRLrx9iqd?pJQRgYph zpUrK%g30H?T2AfK_Vb2bSYM}deLlAag%kJY_FmFd;Vt=en zzLNW;6oP#<%TPT)sZV_^i^68GRPr~%ML7WTM@;4WX86pUeCc6RIlmP;J||#{-|Hc= zyveGs4v$r`ua*8LawOskYwh&JY#LdfPWwgZxQi;NRJmVzgRkCG6I9yaubNt#))Ig1 zu|-uDYVmKvITkdgLg={v8#!L3UR$mCw~^zBCQ0eZzl*Z4@U`gQN7*lJ**bo4u)=w4 zs@ecQ%(jC6^{B`sSl#&#(dtEEGC=-^C$r>@;P}N@2M?a>@Ia*yNhM{W6F;sD=Yb;)F4zZS*>sll(ofE& zQy0KYdsBT}%D*PcW?%(ghO0f|axECdS{3XZH#H@)v`)Mxa+1xJgiX6qKX-Jr5xll3 zorPWcwb4S0ey)7O*;&V>nwy)lv6`lA*F{e5xZ1GVUmx1iP&K`-DGO^#Wx2ko!-S{u z(+^(Xl*sZr@ueQwy6KcdS4&L09#0n(o#;B5mOBca&97}BQz<@_#@Rp`LES}Eus-|)B1<|V` zPo6kDjsMdV_TEa3NB@op{d9g`aRE2o@Y6XC5KP#CGM1l#6{rjzAIR3gy$*rT2mB1I zK{8zJA(@{+aA_2rz@ez0%<_%V;F>7Efh?_zny+n`E>6%og>sz#%H4Tky+1db8$nQC;Q8`}PA_wajftaobx3tK? zI#iAuJlyqR<74No`9owJM&1`5W=X`WLMIEZHXKfi@ObWoCD^)biG_zx;u}ig8k?|4 z<|C@e$xC+jm5b=TsRiJKnOVQfe06kiTQ%z?i<>6SZtK?BuZfP>S?z1LZr%#T18dpf zSRy%IJ8>a?qq)$v(SbYr5{O0Wzj@-Utlwn4E}9S@h|j=Bpv2mSnS#D<;v&-eOp)s& zHyvq#r<+DMjDzqd%*U!F-%BGmZD~;-brS5TyJg~>tWoE@Vd8HS5?FkuFC(gsVL{ZAv&YzA2N+FS%4-Z%vie zWa{g!=A%+tr(f&wVpBfL2XD^gk-lcQt1qQ;>QSuDmr|xN-p5oXUu!irZ5oBmm#TxW zwVE1i;!8aQH6^|3@k&*4OD12YKQ`YDp7GYyw`o)yWIznfNMq7omPr!|s&5{>6dOR^ zm`UTe$8_4uGig3P|5N1lH;UW-e|fV@zECo66iaFr@8z|0ZZufvX6QDzs7hm*1m>57 zlO2NF5`sBUzcNWIqmr)nv};?+8w03bPJ49ibI1hcE0clH6Wv3s@8g(>Wis&Veuis3 z1;n;tbZY|&j;`Y7Yz|hD%5j}HJCZv5vG`|iwk+Ov@drHPq`XP<7iR-eiTs@9FisV9 zC4or_RmZZaENW9vcEZ4w^`L#Gspd7FFmO%C%jxqXSEs>jpBK4$OzJfr{<^XXF<#r0 z#-6A&f52QhuXTYxVD7tqj_W+EaCN}8Ft{0B+hgOq@E)ii9YBV=iF<-oDsA-c&@WZc*z8tBzwjdFPYS$W+0xi#Y<;# zm431_F?i{IyWi&Zxp`O8e}_)JY)X}0pe_v2+Q!+^n~8F>RjJ$yms&11aot8Y8=I(r zU%e@C@No{cAksxVb^BKb8IJ$jt+qv-`EvGA;W?z!@hh#_0&H7_}m=H){3(jU0vdUSE*3{IKp>cSJ8Urw5%-=rKn|1C15 z(6He28RGj0_ zj7)n`P%SIJKbqyrnHA3uM035Db{B2%-?mPHubkuZA^Tyx8%Py;I9pk3{wZ{(99=||xd_S;fcqR35 zD);y$=~?vd(5s3V|B}!G6ez>h#Lq<*py~~?ecrE#PGqIvvI|+wcE3Hsn&rPWq~(1nOVX-lshx^V*#v zvy!Vo5n9>3u%tG}f9HtJ1A3O+QY{sN^IB?1&I5-dI`5?;JFhxTc&l8KcANA(hB>Z?r#x5HuAd!@+HtI!gp z*FcXX9i)xVNN{TA9h?0c_ywA;sEi={o3k(Z@z;CpSz6z`1x!l z-nR^$cd5?{jSEta`_9rrOnhT#Ti2SV>mF5yrfL04({ry%GqkKf;nA^fQ;LR#L5^!D zY2ifU&PQ5Mgufl#YJg>F*0x0GRky^@s_vSjQ~koxs4lMQ^HklD-4%-(0v=uJhH0AA z5KhsfEn{iXmQi$Qe<~W(Ak*~sIYnrK3lNM-47w5`1no~nbGiacZ@K{+eTk*dEt5;vuFjFm6 z4xXzN0MsizQTi{xsKSN!>A{zLvZd?YdRXNR@#DRI?OJp^%d1_tE_h!GUTzxp!Kj=2 zumlM4$HUq7herM(bLU%{TV>*MaeFi67Q_(##tqCZDH552$m!>Bu`1eI`E6!iX26n1V~cxRYI z1BK-a?+Wq%;s_@nZbYJb#?NZd8|^$()T`>Lgq0xq(_@c47N3C^{bPmYl_&}LxU#T3 zxwR{Kpev~+`;~EmA`65ArD$IkMQYHi9~K6+I4KO*3aDz%aI)nRw5ZlGTnkPPYEe>d zBs2N47M{V%*_Vw8zBim~-~OUYlJcds@bqdY62eMn|8jh16|#l;0pIAY1dD=7TsS=dKDh`#? z01Ef5gct+`q)PAvZE-YBE&f^*#yK!9JMh(F!O{w%LN#R6RV^^;tH$l2ZiSfk6N|L9 z0wEs_3?3HTD!zkR321G#aB;*g^U!lCHiWjUGD31}1&^G)6+E;+<8*7CG zC|0OQ)P;&bpM9)vSyV=b^0170r0}m2HDjYnsev4jM&xI0QKhgf>OvHwHivp;jlQ44 zxw6}05JwVUlAsV98dPJzA{?%Qtg66DJ_4qdjzfdsgaDb6aAP&<3rR*OhW4WZ5ak+{ zt&n~2`|^ZuqXT@`#a75uAG;NzKd2Okp7Jv&Y-)^>u1i|f6DD1%45FYHg$n7MAsB|# ziAd5ToqkvtJS)VvlSri_lJrogtA6#)WStfCBGUg!_t4oHIO{fwd!=g_Rn(**K`7N& zF(Ug8Aj285>{bXs>W_9*;zNV*gdoHxV)RuYHp@aR1h?yIVCd&xI;MaZ~hWQl4ceq#WqvD>@_cSGiRciD2}n2xS5~? zpl}MCfCD+W@$@^ND1gwKC=|gEiiY|pqOd&xMUQmzT4^}XBwM+YS`EL_weBQ$hI{pX zAqt~y5jZgkr2-Lypb~7X#2XWGj~uWR4y$JAeHzCHdZO9W>OBI7-&RO-I6#sHs%+*q%4^>z9hVxc_lL&GEt@a z%gj#!lx|=JdS1GXHMDUUy^V+S+QgQ)9IAPKOV~@7?rK0=-y4O6ooF7B(mW7#0aS?k zDELJWf#w0R3EXaoJ`lH|LwEF6Iy@~fPJ;4*)yUTaqiO+pJjEg@S3=2@QY}KGT7*;p zFaV4&dej5D5J5&mPVAyeA$5pmk)u+)qL4eIn4hbybycC6D3~ECLlhyJTP-qzCfAPc z)@6IjaV(0mpX}&^G%r%M3NSvkps=kHbl@$7JdhRBg42=IiID-~Fhh)=_;xaPBU+J! zmkw7k5}ic#PNE9ZieOGAwbrp|7zBm(Rl1zY4$8ndV91<`7bA;O@sgn0i7$6nikypN zz8u%OY~4Vj0_v`W!<8jE=rhD3;5o4f%_0`bJPImmrMN7b>x$3UD&~LY)6m>p ze8_6=f)C|(m3Xa9r+Qf<1MzxYi!rMNVhD;*;+UB!A)7~Rx>D+29U9yuBR=jT`2cFv z$T9ouQ;K=nL2a&v+Lh$yM5Oe*yw8K0<2;0#FrcU%g0Zs>2d7GSRxPqHQ7A04^(YUg zWui~o!W@IB8VqX%Dn14bmS$lF?BQ~aQppVQX~@jv z5S)cZ1jr5wkg)_Dum;1%8dd;Gj3Edr5rV%!M<61G$-Nn&7-wV5TB5v)I6n$%=;_8P z8pGV^ZVeD;RKWLu4uy?|T|`&kVlnII)W@5LCTW zmI!3fh(d{iVkshu+(7#b2INICg$9tpK!TD+&@9l1D_~}=zrnp8xPvJI2CjsfgHhqU z6x|s{m&1+fCr05clNhQzfN2uxY-*@3XpcHJxG#5w~pn3rCvG9`Q z$`@bNwW%ge#&~1+lNVi5!{;#v-Kgi^2}^@3A`>|#BFNpOPbWhmvKi;wjAW+BNM?#? zu8QWP*aBN@zI~c&pUV0v=Jzj2<`W624OKasoNiWv+rS4qR#dLJs@f3)Y%Y9@FDMg?<}(WmhDin0h`Q8!cbsd7$>&L08){RCL%5;KE5Y#kYq4T`G`%Ps6O!*s zx>MXaq5%cAycXr0;U(!yqLhAQN(z4^8^ahA_awq7^B0FonJ`HzrbWHdq{!NIlI=5- z+h-=TljC6yirDOoF%un#ZEjSlv^l9R#|DIvC?5_?r5IKbg$@V;)6rcNHPqA`{TR;r z=P*~eba}#sW}GTM-nJS>j#5#w)Qw+knFdCotHt^g7$C6va z0X%hYObTa>@ztTLOToSgGA7%X4<|ifgZoCyqvevs`D>88V@IGK-f14*V;;U^9=1QA z^E~$F7@5JV5;82vUXUy8Z?#Yw0+wbBmq}QKwukx;W`hnL=tnP@YTKV|lVqe&CYm~6 z+3QUXA4ni+lIV06Ld{W98B2Z_3_w8ggGf<)lg3C)Hqf02$^^e$p)$_4;P>Ghlb+QA zyTdoqVE8cznSIWZ7stwruLNM~NcgTK^!N6nkeFCw4PqMeAgm~9MXp2V2=PuhVqsJ7 zWBD}hBl&JAkZ5WF4F_dFd8GcKF*bH2|0uX)IeAZ*9NNNKj#A{m7znVL;YtK4jtN?I z*QO(m&V|kO{-QJN%F&<~l=7ygQQ zjf~bvBRQD;wW2?yo)Ck0EFX%t8X;C-TSfT;MnoOJ{|EZYOM6vK3KzgWiiW54*9e6E zT9;pa!O2Kaic~M_FOZR7j@jyGG*{o1uHK?zhhK4oCBnxZE0zyK>pS>)5!M3fto|Hb z%J#=er!7yKFCT@How}qf$wee^A{o(`WNZd}RkaiL1KmdscPFOn(Pq5p2Z~` zqp}oXeoCdVQ!GVP-KiULj*ke-IrAOCEzpAX9TW$u)Ba+z&vQUXK@}gNL=_@yo2+zi z$STN6NvuL5cK(i+$*q0mgFQmh>!y{09V9nIh9(udd+U8Z)d86`ZDy#B#G`A9kGFlkjjG^)G+ z&1f=apprtecS-@WdQ5&f#{*GvA1Ub#hD-tsj6{*|P3c2PIq8=&-rz*mEJvMOke(4G zz1IB^^|2l|eo19#+Iv!g_AUli5)l+8)>jcCVzodd>hh53Q>x2%qrysfY~0oR>o9kE zmbXm41k@)6hPJ0?imJ)u$ZEx@qu?ZcIhhX_E0LzzY7FW$Jjryt5}}>C|GOaMkM%Lx z*aE(QyFO_PFns3<57~1>{gMb;3+5`pZR`eA4N+XcwVc`0l>)DVKy&u^B!C!*%O^B* z7*seC((Kdqr@vX#AXAxrx{?_}Ud?Vm)&C`sijzxLH8i237MQ%u;yggb@ z9>%4ht(7-O{7|YPrbi92qz5ZG>RJLvo&uBXn8g}@h6_hgqoZJrBp$Zx3Vk>rnpxiV zd=}@ELlcWjt=(wUXzdl%;Y)u^)iHz^wN)95fk6!lJ|LcFM}u9i{OqcNIjKe_g4R0A zDJW*cOa1B~RW+iqHi$oeAqadx)n{M})r{QH6q#x15py3b8F)GZr)+S7n&iw{PYV%o z9l(u%Ax*`azz2Kp=?uFKfqL*<>`1LvkRDYK(VC5j912k%G;>5{s7;8tG=zvMIidyC zZbp@A52HoUk}MnWzLN1}6GKJl`}!EQ90aUbm>8UH6-Tv)TKoD~okE;hI-z}(X*QmD zNdh_6FAA_iA+7Iwax9<^+@VQ4At5XT7oa7&8<43LG0htQD6oKZ20Gtqz2f+to(lEA z{#uXz9y)?mA$jHW8kL3$Iy26Bz9OUD^NvocXqu6jg(mkrc;OYD7amvuO|P9?O)gT? z%{b$AoQ@V3Av?O1GhVHTj2+9tOjp%9#OV*ZG92={#j6Pu*n&~#MVlmJEz%+lkG|Ca z0d?OFfp6@|XQ=0kAc2g21zL&$8g!a-Y8DDAMcSjWpbSh0>Gar-7@|U3q$gfeEb)j{ zm?|(`mV{V#L4Z*gkkvBUd7)REMKk=OLXD_0aLC@5&AL4a<- z$rqSTAq{3FhkN2BZbCH36`EqZ&gid1SZ@^`Tk8Z8#28jVib#ELHF~BWvAzK(xbO_V zp(56gsXZJ#sm?hP1U81{<+K8kF4RmgwTMw1hOEbYXCst4U>uiufaS_E%Lx)x2rl>g|!G(gFT!C_%Cs)1K=i4mvr5OiZ)&s>8p$~M>#`s#nLm^g!fCW2DOuCYNMS1ox zF@`8J<<$fQl*0)H6fL5ls#K_ftPJi1-Xs!Qz>0k>^M-HruG`cU4>C*qjupu&b?=As z2O@vE&q=$?`U(0rz%C$l>_ROcC~Q=y2mYR==`bl^^&qx1jTy9LqGbT9c7Q0v2C>*d zD+HBCFr*k+2b89)NV>MBO1OC-xDkj8C5)soCCcd%-n1SFAtl_zp3Eai=5Li2k*+*L z6>J1BIUHk6RF23d?W`e&94rOqng9xD!Zf5W2beOx@Gl?uVeBbAYlL9m;}gekOdED3#nbW;Z2R8Hj=jyo z3DHjJgjx!F#);j=u!pCwbMZg{>y~1X!OU?0zDK#lbo+b~)BW)Doo;HnX1WYm;1JMF zoGmhPtm4Lfk{kC;K8Q7*7QKU>>a;J>=Q^r*rNIeRbN#Jb#2A z*pJwJms$p#R&4%UKEKS@0aHspT$E`;lEYjR`|5Xc>#XwWo^By)rCeJTWbgMkZb1>W zie9q4KiRQY^2MT{g&AyLgxJ+tF|t7*!B9*Cp$FmE(;Slr`jdMX$bziV9c8Uj)}%aj zG2mzKFAA+0mC>K)R#GcKQTc52%_xedZ?UHzCb!R{f?Dph3ZmBVcPjCk7Wi_OhI*%w zJHe0Bai^#ycY3r!?sUf<;7)fO7r*ic~kpz%b|V?InN z_@!o)lSXIEr{nTL;68>%h5K}BsZ;4h#rtxWH<$Jt%yxW?#yk`&<7vKSyv?O#O-~k4 zzDpJM=RM^Jg$?G)XLAb6va^TGo#kUu%Am0>mBL^w(d{M6Z3c%WlhotQaSG+*P>;-& z#f$)!i)nVT5~@`hsIaM}cg)d>Sapf~#rH^c$y-S81Zx0LPD#uqEEY6_`)&m@PGRTcLo~MOUD<9-B*M3{fIBS7kqvCWW_g^!kA$ankE$PKvq@ z!cR=EWlZ~QHhlR3_2oYA%W+b&Is879Y#zW*YMNp5p{DI~qz^M}F4KpZHka#`fVLtb`s$C z=hs2tOOXX$k@A^n*@AQdO;r22Y_NWo&qBuibVds&kF55$*+C74toHY7mOdX~vkCYC zn^TelY%cbw;^io>Nh&VUfFs3wtA2LkNmUncOr&PBB)9Ib@uZf?<>5)3EOZ47RV=j4 zs6@?nKs7K}?h>kyjxMrwz>=h>Vo`n_92hC`46le##WT_c^uRpR&&D1hZ1C*j0C5P)O^};gxc7)9a zdnUg9p-2?nBWyW89 z%?9bJb(7<5F4D{iHixB|6Kn?1j8*O?kgm_NbpR%cW}cN_hlYuwnG?NYLNh1oLU|p2 zw$1F(%(K&9L3d8F+0bFF5}jmodEB|YI9gl_Z>tswgp+M4ukw>^F#!Xz!ExLmw^LSj zI2D{#eaz*t0R5QD(k4Vd?rH%@BaxXOZ&8cIvrqVi%I5%sK9MP+G3}02MxxpsCSxAx z?{wKcWV_Q8aYF1aml5#MYUEumAK`Pi%VXhlx69Hdd_L)FvGDn1i&`vvKIIn@_bUG4a7C%}-dIciAxvgKjD5isPsx%mx&m73 z{i4a~)ZQ<-Om;-Sl*+af#aFC3_q$pk08y2N4O(p4!uCzC#(NhU&EuP{QU~-xOu_(Fy8OeSEv+ugnUd!dB2QzKnXAWEAgI zpJ`zBpsCOG?;)2FFvFJ*5STsWa(Z8mlkfT21!mtfIZY4aU^z{96YWgl%Af}=elp}{p0jBR5R*tQ*5b1AFnVqz6F<1YcP17tz{Oi0) z7(MAHF4j)&h?-ubr(?ump}S`EgfClRmyMpTuuPCWqi07uM$cNa(NioSp3$?T+31NZ zyJ__7m@=bhM{@gt;CH7azR@#n@O0)=WA$`OqqB9wI;5v4!lVR|jp@;uI-wbz3gyGt zIfb8OOpht6r?K-)X!PtbbA>%_^aS*FYV=$<1x8P$eLNwJo@s+;`CN>yv3APn!or_2 zZ59#*5M$MpOig}oIrc8!-l->58H*Aec-^Ah_pyDi=pujbWvt@EOZ{iG@P+}F# zj2*LWdq>3y88Z>BI5Fef2lSjo0VHMeB;2aHP#(S3>^D4cWUZgR$rGGH&+U!PQ!Uvz zgQo4UF=)2kVb8*8j2XtpnW;l}I8HokXDD+pW9>9tPQk?4IWbtAg{5qq86M`Wo!*?= zm^)3qzRA;ZPh;~`FmVP=3ln3|%=D-A)YP+Xnwjar6Cy#JI2$KA%jFYe-!yGkF!61i z0uyK8tPr_UOG?hv>A}RqsOg*{F@X>pP@rur{H^LP0{avisKeADKe(bjN^f4(F{brHx^CPw>WXu%;d&{pxk#r zxpxN5UDWNN)bju=sQ6_>6X^DjhyT!{2ho4%qm%I;DuOPIa<5TLOQ2oaSM{{gjyaW` zU568RD(t4x{*0%9(ymqQDNx$)JxJ95r~3rX+Iy# z_=%>pE12z`(yowbVx>J!QVKiuHKVW_y-Mk8PF2@BtWneR^m@-n0UlJ^jmc^3O2La0 zr?opB)~W5B$T*$c5>^YHytNMNE9u%6pHb7b=!N4Dz4Gwcl)_G!7==9z6Q`4xZ z4FM4?Dx;~RU!HDm%@0mJXV0BlZUJr- zbKQ3XtXzPLrtGwJSV7eiW=dCYTKiBK=4tPN%(#u}Zgfk3Nn=-(cFY{7QE5MfO8fh9 zawxRtDN))FZC`2sKsbd;`_etGwBI~C;3;lT|F^3UkaOa&(1;DTBstuVg9u04VZ#G< zb>Lif`1KEz;Gzd7*%HqkC=QfxJ^;>#D&cgMqg2BMh*rJ0Dz110WjpEXdLg=qFb36z!087R#`GW_$Q9miiIxGf-N9Xy1X-eu(xTDD98vfPvBhh$;i6 z3Zm*jsfwsJP^uwXI8a)MXwg7v5u#@dl%9d;nFFO~B06xOgoPz|j+GW8S~5^tg6N=u z5+N!w?-lP&ypZ5d)nQ80zC)uj}iYR;)fCc72-z_ zKNs;gfke+k{4Ks!SKOgZ!hzAjW5Aj8azmIq= z;vXPhhxmtx>xh4Zcs=4DBi?}cVZ;|BegyFl;-4TMM*LI68xj8u@g~GSN4y#FqliZk z{{rzS;$I@(g7{a6dAGr@5sxAM4dQXc|BD#sCMLf{ycO~95MPS;_lRGB_z#FLL;Od? zmm~fY;uj+RGvdEP{C|jFg!nPUe~)-OsOt*ES0ct~6UmDaZx8YC5-k9uL>@;iY)Ejt@8B;d(y23=c2m!^`n-10P<2hnMl; zm3VkLA8y3MEBNp#JiL+*ug1fTe0U8WUd4x-@bGFrycQ3y;ls^%xQP$1!^3O&@OnJl z%!ga>@H#%+0jBVJKHQ0iTljDn9^Sx*yYcWwK70}nZ{owJ@bC|O_%t5g9QM71=W@=( zRv!Evh`+`7TY|rX@YjvMgYkC={tm_8Qv4l;zr*o&B>s-V-!b?*7JtX%FUH@q@b_%| zeVi43g25dO?qqNmgA?%gX+GS;;4=)4#@{mh9f!Zq^2JH``vM3nHCtAd76y z>}dAd-?Q`0eg5_+9N3}eTy6MQU||frL7XOh?-=;6V@4udz6;4+>H8S;#GzF|Z?9h= z`DFS^6jM~sb}(bZ?gp&od3Hve6ZmOW$aBB&*TwV^b7+osO80;s<`6+LRa}R9v_s;s{B_24txX}=kKptBYr8gQH&pY_p zTmL0RBFPUskdKu2qi4T|dRR(+to9@r((;$TIBIaA zGTeZtp2yy~UUZ>C1rNhj1XJ5s!11up<9d>k^z{r@TvFe0&j4PJ*M@T=^72J-Pd4 zimBg`g~m6g5Un(XL#2YFM>S;ZwE4P6nOyIcK!3+^(zBJX;0e;NQkm!JygE1X`AB~2^8 zTK81kXwg%3$~P7f{GNJ~?CnRgr|)U2r?v3yRPLdySpNv%0}j~q@xh-l3tT31_-FHB z=qrNWCjx-pw;KTJo^AlW6&UoQb}{JS>A@iE`)+mI7TArUl|20EnL_X!?{9dK!}L!L z^gkY;+Xmh2%87+(;_{SWMO+_iA2c*y2r*&XJxHr}npo{L9obB{{r?%M;M`+2@$awpSzIfbijsb~)kY;ntESMph9 z1a?wiY%y@A(G%TtK}WAR#`$xqsL_scjm|L4hygi}yC5pe>mM4OHc1zf&#Nk(-ON~q zgr#a7Q>;O3AdTATgQg3e^&_Ctpu7~ z!(R(?mnt&zD-LNJN)}J+bVqv1Mo?!c)N{(zv=dIJLHV+2(uN+7Jtns=;~tYgw-&0Y z?pH9D&vJg3Q!~Vh8+Y~oGJn3kTeM&*T@**A$%z*J0v`jo^I{su8@)#Z7%e-3Y_kWJTBDPzN+Vv;@_L z1HI^?stYUv_eAlyvT!DDI!|zgRR2o3zJ42yFQ>Vu3rCE`yoa>-I>xK?Tdz_U!dvj8q< z6AXZ7cnKbWg)F*!0C!fpP6u}51Z7}0P#nKk34VtOj;ihlk|!akAtpv5^-Kax?%LH{ z7MBd+VlDw=p)yd0Pl7F|w!UUHg4b|ojgd9a;xwL)qlN`Fnx zb`>DwC-5c_I-G5~i-AqGsOaBrYg*HlX-yHn&DK6*8e(?7>4vDUu{mcb@BlJw7f}~% zA$>QlzV~i2HcBd0ax;;4m6vQ}l^eb0A}#kSuU=f`g|xn9(PBiUWzivsW-N;iM>KO; zbTp#!vgkNOvzA3CBAUG{@^s5P0)6?{o%y!)s0;`v?ouo1nY&PkV7Ie(Z6r4SgPJm@?`a9_2TZwdC<_~sTsD{?qQFm z7q&)3u87F)E;pL`NExFw2E-tT@G#x*)Y&GB&-chAW)- zIfKa%ZIM#ufxjK6pWE2lh7>%15CoM)44G!JQw4#M3!qLK0V^ z8J&X%bQFAr0o6+eqcErpp0W_*3O3eYlm(T+9p+Cmmkcr!5Fb3FG{6!n(}$YO_PS2* zCnj=Gd4*)9Q%xhJ>q@08c*p*uXs3)MD!n=VI!IA6PPhkICE0~nx*M!Y!^A8XHkZd$BQ$ayp?MSlc4wC!|5_W zz9gI`hIq|1SRiGRN#1AHE;2qJJC36j>YmA*bTSh|YPeELvQ3qt@z;f1!7$%5#P~kZ zvgJVEzs6f_k;YqX+uw&^><3ETLtE%@T)!YEkE9e~?|8Dg8zF>}@KTsLz}3O=S=K2d zVBtWP47BVWtGL@2H>JYqQ+-#;dRj`{eCA24q#daTms;p=S8zQv#MIgT9pR8C;7#~| z;Z4Hjy_uNzNlz&B$Z>oriBM#ZJc$rv>;Kj4Q%WM(J_TIu0mE}Vi>oUYJ$HxT@@_E# zujT1~Mq+4=;JR68;`tuw zyq2#TaM=%6;i=U>O8+*zKQPBCc-|j)}19rAc zIGSjMznxpA9ubTx4&;LPN!O*R5)S?-!4h%UlTT)urgDu@=eT>8kxzmm==3AZ|vCl*4-t- zSzy9}nU$8DK0(ShAObA(u8Ia4lC!`(g0a$^8N4bZ$RcDq0-3zdN~W+9yxlU2u!)Vb6mj-<3_Q>g4RiK)Rb+9dh-Zz5#X^es)_8v9@Jx{|XAOpZUyAtlc@{Y?Q^d2_ z!^cO8cout2bCIZtyxIgZh$Iv^9w;Z5sFWJ`$Fa;HY?3S>m)Jg$Pi!e!r!W$qqv78o zV!Kn^^37mLJ{Cr(MfYVA`-RyTNZMSM|FWkvSzR}IvdR=`hpaM1+99h05iBo9*5d$>0)HRH*H;46w2H%4t}5k|hDzXPd~k;Eqat{Oo=# zdDH;NHL@J4mP@^vm-7DoP?%IF-hctgf%XqinfLGSJHld)!o1j9b21xnDFWbMN2MfY zMCV^bbpAy&A4^Y&7F4?!Rp0}RXc2sX5w+>dYgau0v5nA9YtXMRsTHB@!*2jDF4ix;o6FEx1FLkOO@jCKCTaN+RJu_GAcf{43Twq`R}wAySE!zxz~M?BHx)xg z#Y*R_FsQ0EFzQUur#p~K*9NcIGi#loofthVQtR(d;4M*PD;aX><=Y)VRw`@UQ3@<;^Or0DfS;5D)%q@jA zwG8w1G+4Y@27#{uV|2cWTZT{Ln=M*~+L+v(L>NGEiI@pLX06Wf=ncnYe02tU*15a} z-HTHQI1+OT0iOgeZ^8AMcWJ=yllSCxaFuI5B6uP$K-9e~svzot3!LViRBO>Y}BI+YrT*Y+0Z3^f!!w5zJOAaT; z81PWg2Pz?HqO%gnPfP_lX7H2`s$D=vxI6TTMBtGIKxROI=v=T;0>&)4nV#2OC)xv? z%Cheu&lxCu!~tNlfU0shA90J*ox`;vhzfu}6jY0;=15~a^hPGr91p!+a}H2O12#?5 zB*%=FDol9c8_ia*TOIiG)>!r1&T0fA1jttLR3QOaEtW=AVtB4VbsU!8+~P+VQa7j+ z`70utMtva($a(T}5g9$;WWd6K&F-%`-mO0!Q~-yNaKP~JlW4FVmJaC47!;3~kg3w4 zhQ%W$vPZaMiJ0JL)K4{-C}2JAk)S^trr}_)rnCLo0m(^b2L&}d0O~4o0(p^~u!2r< zDkyR)C~_(&aw-TpAq|ebiyc)Rq8F53m+!{lixlVIMv)?pZQ|cXk%C`yfmMh|SBOYg zh)7q6NLPp^EmAPj6eYtb4(2p$Q3jC2^oXeuj@bpOU=(X$QUS3-Buw%2S~qf`+(vpX zki$}%FpsLLC+4{g@Qd{)PtIYdLeW$;#wGW zg3k5$!-sEGt;^tgH>H8J1=4`{4mN=*G=ih6L@lDdVYr=|;bMqeFkEmMVh98q87_QF z$Z)aAhYT0D!x2Lu^@$;!3Pa$MPlns6Fa+``hvEJ(f4Z5mQhR$NTbr_F5(&xzFmaUk zB}rHbc<+T=LaG#FIoSmsdR;gW7w%$#g=F(tCJUjcp&Iy;K(`8p$#{cB*i8)4v{My1 z&(_oXPo=1|ExLk3mo~^B=gAh~+yNQ5-BSe;RI&w;-BSgmZF5hRY^FL|ZLMmPJ|HwGX|U)6V52$zI{=nO5;>y)Mv zCq~Ff-ByJYjtBXHx;y%7om50XD=39u*!UeeC8|YVKuFLa{VzgNs@@oO4yBQM#!|hB z_{B)|MjFp&h<1P#AhbS0U7oi!&=F0;UsT3j;Kp)hQ5R*^7m{iv+_13*R??_}tu?6C zcKLowo#jPt4bymqJR{DmkGZP4J@UCK|d$s7dePC))V>sDH1|Y0b@i)}#*#$zW zmvUK~7vt)TUhqiUpC07*i~{TrSYP?gA)4b1ZfK6SDhYOgOQ9Q;RqTe*q~X&AIQ1k4 z@Nbn+c{N1kp7}t4g&qj7jA;(QGP-%sDzpjehC6jwc42a;6H4T z2hw)jcYPeAx0*#yd?tHZn6S!uy0nWWYCZ(aG|<#h7(iLEE0AK~9%L6lH(054}h_{G@|B1$Mk)Y1@9OGCt6zlgZ&7ZG>; zB5G3@bsNm5i39Z@>Z*03CU7WDw~Z9R>PB~JonCw6B8w*uz~?2Ckp+@THVKMT zZj4}!;^>*9KqtAOo9ZMBi_a&WJw<&N?{MB4FSvp&sl*j*X(g^;cQ0`TJ706v_m339 zo*cyR)prbOP}PW$_Cii0MmGn4fx?K2LKBS`ZDNE~c!>(&)G(ru*d|5<%py~I0T8Dd z5sGGr1lL4T1k_#?T8P#y97hjiXQfxr0;;4%3n)D)ZGh!r$C(HpI6dV=02ZvkAqHd} z`K{Vhj5@uwGZ+@i%Yj}-0}v#(D=1@gxE^q+N#7SOiuxU!f1N2smZ1 z$Z-|1sbB>jN37==6c>1!Z@cI-8DDlEQwm^Af-prO3@71`ApzK6vBltmvC7~U)ZoTI zZJ~P^V1sKIH$qwuuONs>iwd+;i%XRPt%f2!^@g7~AuaV&1Sr*EH%}81fsjY!ZX_0v zzhfl+812S(0-uoEBvwaKkPkvuY8WW}IjO@a0PSH4CqVMdwQ3Z6&I_6CozH;M#C1hr zEk*#8WySzsRhzD+e+(S(tyldnk%2&+Mi7ulTD-P72969A4HUq2g%sQXR65kQttQcj zNmY~ROV8e*h=9jUGyq9x1^~*F*>7Hn6~~@3A^>xuqysJR4rS4bl%#XxV2I#`T^a`& zfLt|a3df<)VjPU6$R`AmX_gg<0s}*$XdWp-u$o7_k}DY)j1F=nPXWPTh%Ix<24fN& z>D&1nDPJ}K(j)_`dTQDbom1~~nqQ67oD6E&gno~j_d<_Uj0sjF)*Nu=M1z?g3OCWv z1&pb#!xQ_MnreLJOptRPt{lZ+Y$&8uKqC)4u&v8x;r7tG|u*l8N zpnLCM!TAj$PnI{aDN8yj+!x)1Oglqn((!ODqJ0DK#7q54Y=xB$Mw}P}^blfXpfG~M zW$_asHWi|hFuCz_!5UV>hb{PoJdALtXg`Z!g24I&0Q9|J1T(zkGbaxp6X7fPy~X`r zQMu--V`Hft7V;2@tP@JKtAQ^~322*CmiY=_qA{vx4Xpw!pg)M&w|q=xMc2@Jn{@c_ zvqG5jUdc|NFq|fnp4BMND*5B^F{I071oFEU)xzY~mv^qloR;5IanBmS1uB+6Ac-+s z#no|ZhI{#H`)v;vRIVLYJ$p^kDfzbF^vE~kHAxq9ZvXgK4ntnp6Y){3ZkFE_!r=e5 zV%U|VX)p3rC7Aw#D&R+Kg^H$}6%mm)A<7yFG2c*AFhp%~s%}L=+WfMy2ClKHupBpN z!0OkrQov2TR>qA=mo+IUdmjda$lhNQONp;BPZtPl7^w#6-kT3{w4ve09tFa#WQ}lu zH#{cZMNE#82m07tj6v5*-7W8QA8S?vSx0uGVXZUi8Qz4y8VoTFLL@cM1ii?|y?JJg zOsE|&1;06ry7=MwnWlSy$+yluaWs?S3hFs+(;3=I*qw)h<6!RNq7CIOF z37`g1QmZ;@h10>vD#CqI0|2}UT_<2nJPjyRNWkrq;Pn0)R)1DeMgTey{K4@}*j4cw z8}tDl8b#3-ET8cif2-stD73H=7AI>4M)QFyqG_Qj5<}R4RUQV_k^suHmZJRvC~vCl z0L3xF;tQrbODZAyV^}CQK$^!%dkVL2N|EWYGNm}4x=8EM)92+fZ<@SZ?l0zQ{{9IQ zGQq*vD*=nB55ta#8;KFo57avQwO)q745=W-<^F0R-l_L;tkgiV8XzII$O9)ygvx9Z zlBfkY1dAavJYx<|c0fj*8)kjt2(mczGABELRW;@ECe*kv^Bx`m;f(68GS5>^j&}GR z?vusBkujd<9PI#PH& zyD3vJk9Kf2V5pc_^Y11q?h9PPj_ru8Dv+yVI?`=(ViSZXGlW+8Yj$WW8R`A0j% zzQq+_kV3}jDuuv4fo18V9b(-6D_BH(b|gnTgo$?`L`bIVm#R{C@s5Lt08Mt>90#Gt zRl^hV~X5l#Qm4(|@pCqs+Urz!HcyRSFu z+!p4ng!($atbjv!knKR*Rk{xDd+39@j$c%A5X~1;4$)#lWnYXj$Wl@J2!z?7Mu
P_fzJ$wYLKXvL2=nNx}=6tDB zZ&1Bt@Ht<>UtI%FkPIH@!zVl*22LXx%sLi%XX^YKZVzA^4F6IYyk(#$ff9}khF7T! z-bxT%|Czz?C6yt?g0Q-e42A_EgGNlto@KtP*)uT3*oKoX<2KlC&Vsr(H&2m_Ry$Mpc93<&8=-XCwUBlM**HoF=eiVte_;6zT5OMzOv9VmwzU zO!l6r82DcSm&yxUP!dZ?pZU5_hEo$PV*H z8@_u~k0Gonl0;daKY3-D{OU=hEZ?goLRN6VrNp77NQ56MiQq(s=45UvH-WOOB*GI= zS%$Pvi43R+V41$iNUOXFCe+B_i;RqV%Vp`b$jGR&SnxmwPhaT1Wh1ku{mAW zDeS&-s}**m+&YQSNnx(nC&}Go|F|QdAW;%w=Yk|oQi4QDgq;hLI7tZ-B@reRB;Z1Ek`g0IA{a3;1rk9| zNFWOIF5R*c1(XPwmpon);l0x?5#CGtFeU4R^9wGd=}Z$yv(#0IkY_yGz|18wW7M9+ z&hs-(g5JCH+dQ?06isj>GOiKa6?X$Sw>774;dEVGN!tW`U#Bp_nDav{JQyRD9gfy! zDopDAV;8pL-(@(1Ei)vvcva%;)C`Jv>Xc;RoU~NYnjEUB87E)d zl~!4Nr>f5dl9JzVgWIOxq9hnH+BP5rq{v7#NMi!_$VdU#kdP@KJ39yNHr2p21jI~O z-t7g|>?U>4Jm=tSsAETA5~q!5rlsxd3fx#Q5tCE3qYc1kxEN27Y~oqoNx3>iMFy~viyI7ug?Uo}!!6A;KscSTo9SVeO4I_C=asUVHg9@|_3FJa z9XF(l!H=>OHA$yc2MEKm?${HG%-&g}LWVEwb}t@};e;awhx7i)3@03Crgu2++7rV$ zfnK_DicV{M{PmwH(y#XjeeE;d^tDHNvF}r&7jSFwXPi$`j=kV1(Tn}2yBELCpWXP! z-oYb`rtFxeZ1E&3z@*-m)(I7Y+5}Wpt4+9-(xjZsNcmnt=Z>KrSglFz>Vl$oY;1P8 z?80s+7^9rdV3en~L{Xf(xa?aE%w_|wL|_AJj*TI+|5#kN;QFWUYfR?0xE%WS&j-nl zxyh%YUAEX=49BV9Hqmb}!}2sLx_!X^CQNm8wZB;}n|LIFg|E>sYGUDS(Vw zg#gkA?N4k0vyOGa%9XX?HZH4s+GQY%qSCkBGI+T;Zk*edJY1U(_I?Ma9@Q(27ZE0@IR&?ZbLo>j8mYeT&K8%KK-4#G7>C=K_$lzq{Ubf zsep{R>x}7v60b2gRImW}(_%3b(0+Cs84`RmQd1j@D}4Z_k`SK|$Z9+FRH8sSV@yA? z?qRk<|B$C#r{IPD)aw)-b)Iq~g^QZ^K&N)(ukHBSsnOEZ+75o{dyU#uQt5iC)l+X{ zA}1LInaQK& zWJi#k2z}7#b@s>(sKjVvm|#&g={lny`&G0+!l4V!))r$8;Xuq5jG0?(ZFYYt)NTye z;T33)bRLz6+fv2E7*Nyh+qJu>U`v%c;OCDzoK9pk?T7Qtl>P{s`GsseNo`nZOR3bV zxeNqGAGf4uVNKu#s|YlIh`pHzj!*>r{}3d5dHT5ZVKDI5r+#1yoi}!bVFHs_IcXj^ z1>Zh5qd^bR6db2P-`#-6JG6BkFGmao>F$dS6+|vbv}S1cJ`_hCxk|f#513JFmCG#r zllqh^(p=@AgehJ-Qyu>-bDZrU2g4bHA*S8O8A?irNcpzPKC`}6qJeot(Fq3;pD>80 zLD$38rdRtU%P7u>3Z9czxQ^~;BdRXRUE zz85fG3Tw8Biov(%e>4^ zTuDOIc>&qX)pv?c9uAU&JUa3D6iSf}L)k0IjYdbw&A?zScv24XBpBG!gNzLbPxV2* zZ*m-)yLX_N$bBkH%ud3`RTXLC*uEO#lnPG)kIHwEsXv(&532C=)jZbULuSq;d75sq zC+De7x4(H3XqPau>uD6M?Ng&*UR#*d%qgp2%9f5c6-+xNM>k~V>xomp{8QPF%Y=yUNu-u|+9ocJ(xqbAxQq!VL0LW(xiEAY*^(Q(cm6#g+`a z#M|a#?Tz=sYRmsT^M>76ni4Q&6xZ?phI?+uqiK7C^lv--bLD-HQhb+Y)+uLzRGuuXm+q z_)-Q;Sp&FzK0EuFpq<{n9nKiA@;dWA7M5S)OXFRVW-UPT&FLHY&K4to?-yj`zttWv zc5C3V^}>>HYn0t3yzcS`zSw%;zbKu3a1V5L8i%sG#Zcb(CFvaux~&|MJSu+sZVlzT zCUd>2-S7ZCpX(HD?y13Ap1A}@E!-W66|u}RgkIgCl{!+(b`oJdKrP!zgtf5bPgu5# zcYoQAYX$f_L!CYk)!19FsHinNr+^D*uoDDK3}nqtme$|~#}zgns3n$EY?t6Epma@EqGc!IKcD9aDr(ObFmR^77Q zBs`wh)Vx@J+vC9`XYU4+oFd-_%OofCZO9nHLuPHU-?C*L3KG4eg9 zJ?h1pzA+l@aq9hJ{)L$N&KEqKSXMmzvlDqZu~m2!zr%TBE&Pm)0ML#vZSZ!e8>mz! zG@7^HJOOf~H{s^+c6&P#E>#oW9(%eC+@|iQ+f;^VwXQC0R_Yh#zEo=@vR+d-5>0tc zap$VX_+!tDBkeV1xWDg>KraudU-)xgQ}CSeTsa^B=r!d8gNUG_*@A!rRp5X^uPGdz zOs^?K^qPX&gr?G6qt8FFO|G76w$1v-JIXmJlvWN)A&DRtJ5!GQI`?RrR? zyYp52Cxzzu&l7N`^nynYcXG~H`I_e=drWja$S<{_c|M-9>v199c~6t?Q<;2kpHA}q z=^i8B?>-60_uY@j#PQ2Yze{=fwryT}dghq3pVYUoQKna6u@n2JH&xhkhM$j2C;k3> zkJ0a$PkiaSCk`h_B20A>&nMqZ7l31&$6zzU?j2&%`&j-RJ^uW+)n=Xag-LC0-Lca& z@ucBhrgle;Tp!j~i&tTm&5Nh7XQO`=4St>#(aeqLO$4jF+;LjP1k>Kqhq-6!3NaWX zvo~15H6lW_x~h03Z;|IZF)FlDp$Lg_B9YMz7r>4`W1yyl1l z&@tfvz$>YF0I;5u8URkcGgnt-27tCvx!4Pf7|p!|LalikzW4Q89PD$Hu2ut zU5NLI96=wW-<8;0kY_9=upQ}>{fOhR&L|MWdTwzXAjYw>$VRIW>u3RDXKY0_TttZ4 z_+js6-el@P>@eHhU-0St6{#uO^pe1|15o11Gb|RK-H*F=Fqw|mkgQwnfw>_}s-BaG zZ*@W`UjHOZ7qIbZsMiADwIK2gugQ*C+PbmNsoOgX8)^f8)>*55D>!L{=TiMn=F_CmYZsi=*hs(~wRUVbZmXjp+-jC~Y z%E=p}WOi#Z(UxlxNw^V}Y5s(zZM7j)t+7o~WHuxGgZYd(UoQarWHbd_p9P_aVHL5MHgdbd5S#`k8J_JRjVhq*KrH57BiKnns7~LWx@!bs zU(6bSd%qb^$KAbcIRA9vDrI+u2YmN5(Hs5%gMNfNz#UMr-E}%N#nipg^neC0P`7Lv z_9Lo_H`HJhsY{@FOu!1TE3+C7Z*1z8rs+)@Wu>@_yhQttG;5TKv*hrSH|L)UyIbOS z(!Au$ZSj(t=vX+c1;U`f3lueHsquO^5Ztg{by6H=m#$Q9<}go4#e0v=d@$|71SeCUFX5kD#o;(+HEf+_?N&*6ZgLeU2{sO~*M zWUu0qi@6q5yO>s~b~9R3?P1jB^v7~UG!i$p4%fhXFR6ihR&aU@UR<)VhKH5VDxrZ@ zyTR-^0+sF-mxp%)Ft~WO*2VUt4h~zf3eLC57dAO@!u~29dWHl4GHpXvEo0 zn}`Nb9Ve)An}|A@1LK8Jm5C=*nhvl7z>9Vfu7j#yz+m+gDY&FiDexpbvP2Lba8J(9 zKm;LJMkE)3L-mIyjbC!7XGf)bSyaIgGv%smj19uScp5Ro1bEv~|n(KcE18O8(phIY!!jzGi~p)lPdtx%!VCM94Dd`cvU0+PXc$%V}DI_ufbjjqAE0wIVwR$P?*-j9!bRJs#R4lWCEM_O3+-T*|hq2C9B=@ObbfC-F$o zU+zHfJiXYory7Ai0lQVS;Tg!)1Uld?KqIhvVHA8N{F3qj@FUicZ31y4;g^7=`D$Ug z00bl90K&%i*Em{i7v>SlMq>aX^GcZ<2QXYafONp!69eQC88Sidmm%_qj9e5~E29U2 za6I)>10<~Unx^$v*$@sjrG*C&gGXwrx?2a-aDGDq!yE;321G(&1w~*W<^SK_w*W|W zmG{rRv%tbEFiD7cfXVDa%!{zQEG$b*2$xq_LLl;puh`A7dv_W3F`JoL!m3S3Od=}Q zv`uTYXw_OpB{phov86R?w5Vv~8x@trXi-sPYuofMt^eQeJNI#Bc6R5^y+cB*Y;MlX zopZi(&i6Xs`ObIFp@7wifFVh=o0s`=HlK2aY3zsV%6cpGkq0yRSYs@Ogd>jxBSAr` zkp~HH+(JT0LqbVILPzi4E*XhL7upuYS>wF_6>(rp3cvO9H zMlg)4F${wG2sRDyrjl=z=g%3zCL@=_5L0nlQqxp&hQsppq>(fV${DT?=QRL1tPc#3 z<0ufWW}d8cF)2TeX2!gg#W5yQGh;eT%?wvDEh8vLG7b*jA>&L|j5Ap=&Sb?nGN_Hw z%zby_CS?E@VTu|+w3oDi>L6rI zH^Wj=swi%`x>;cRr|BRAv=w1bp4|kZ(wEOt_y+RVdj`pPeF1+J&6e2^Q}xDGelWx0 z;KQQcn5@xMy^+TAGnNRbk%8fUA_u6e*WwBpiiqE!(v$z|N0obiM(+`lFoG4BK}T%%l@@x~bmXcVtg5KcX$ke!-_F8vm9?_Ok~w8`=O$w&YRMqg5J zPk}js8*(JQutsW{bupi{Y99+R=3kYeFotdj#@v8JV2rwpJTpxlzUD#%z^QEL4#ECZ zz^Y#(e8Zb6WBAQ$sCKVL92T^*$Ju1tfWcriMIpYeH0Dlr@7 zQImGVHEW`oBdvBXd&O1VE(c+N+VRkei|#|ejU5j)C3iQTl{$;W+QIMqA-VhB_xAx; z=q81Eawj{a4eefgq0m4?D(R+#b?5bs(-SGVrca^QY4S|T)FkQ~H84}XeurQTl}raV zXQ0KqP46nf$#U~6ys~v%YHM)#CxNr&+>T&y?{~a_PE`#MMX>GU9ZfJXl@gu_X9+(| zrBfUtff#n%xm?q+Rl@d&^HD=4r!}@3r8DIDF&!3z8(} z4oDa+j^un;G)U&aqCt{^NrEKc804{tcnf67iYtnkCd9B@Zav!2h=6UM>hbBYuU6w- zild4na4<{jJ-!fggTIrUvzvTth2siek$GatCyhpEX2Jl8CaGItSO_&T6O=&xYW@oO zz!g9E#OrjJptNDl>IV**;+C-!^JHlwm=x53UB%McA&-8$ly2ofSsVp`c4^~ST(!&{ z!=z=%ubr6z4-5RX^U-{F*kLAMj#ovc{Amu#Xa^30*QJabrS5jw>5`-DO*&gJ4|Co^ zp*TuI+3?agf2xHV{4)swUvTPoR+)Djp(j}oN#>#a>Df~ zSo^b(z(_nFiHM6S;^ND~Jjcurx^G^;9dY+JWsT`5;^MV6CU3ufjPVvuaP&C4r$26- zmU|m99zOcbSn_TY6F8U2Wn+OKlPs?LiUIlKG<#}{q@>m4eroVOCB09xyiezQpXPX< zQr@R|-lxmFPxHM`E#9X^-lvYly>(?bW-li-mEGSold={|A%QMp!pRvDxcV5Hy%6AlqbFko~z2k|DI2~<+yRDCOQZJ|Dn*tlht z4T8jR0)=sk4Z@_GLI~#;g%C3-HYmw<%|U{8rI4Uq^N^rjmm$FjHXjMv)q(`=T7(4c z>Og{aUE@pbat=~fEHMR)2*NsPgOetmbe5Bz@1%2_H07l8ob)m$o$sVAPP)iRI})#t zmt{BI2{2W$8xpb`60#c-vKtbz8xpb`60#c-vKtbz8xpWv5GI=DG7-irj!|+)+BBbu z=2;D3BK5*yqG>f`B2gUE9M%Bg#+h4BQ>=mc09gYj0a*i%W3mREi)0OW>Bt&zfRHs{ zBa<~`N}obP*6;}~UQZDGBjpLvq8Tj-MF=D$1QHSg2?>FOgg`<yxZyhmz6fGs({Sze%#s zmtWA-BedYORwnG7d-<1M_brWhaOyDUX@a;lCeD0s)aR0xR zN2NZ?l7&AE)kQe z@xz*(tm9&W?bk8>Mr#%v0TYiLL4Pecg4>?K5x&7IIIN+s-$$$)-toHfh<$e0=_qkH zK0g)Xuozu6<*pya%SLnR!R1&gjx~Zhimi~4t&q@Lgap=D5VrC?_5>&UC=eJcE55F} zilrEF$Q8|a@_nYZK#V!AlUH-8#F7^wi|bKwvH%oW7vU)$>*@z1S;sN8f7j6%d?s+c zFteJCInc*AR^V$HlS%W9#H`~EEZ03EOWD#Z&8049VI5cAgh?Je$3oOhMImg|bx|l% zPVn#_@NBtp?%yb{IzyjySBhlikB~v9&iZ!o{ypHt7)L)q2S}&GIxOxlA3vyzFwp?+ zMM7UElDb9{{90}xDZvI^&whLkHaUI3EcLsH3(x0CtIqn4>bu64@JPCo0aJ-JxRdG+ zo>xhNVW8|be4o(n{qHyq4L1mi6zF55K3YI#Cz5A+f5VEk8}D8s)_6UUSWkwh7g4C% zQcaO)yE5gte*HxQt~Ka|K1iKWBGm}`rzSu~UOA$lG^+?YM#5cMDaNdYG{UBUSyLL> zY{e4qD6e~U?uEylv_isjT|EDL0PdwX+UH&pAi1m&4Cv?|=t~nqsZgU^J$OUY@v(2C z1lZF$^lh%3TINnFYq-Wegj7(C%_|Md{fl&$=qe^OQ@TW8;$Ncy;7? zCMtRU`&lN>Bh?OR6P(qnd;f7X?TT3P>QYr-BNzM6jk5OEcrq`mbIQUBAoHaomeZ3G zsV^C{L^sEiD?Jg$LPzy`c4@SYm7>HO>&nLW>K+GO#W{Em0; z(9M8T!56gx;(%bYmhRHU!mm3|hT@rwlm2`($s(7(`<6Nw&Iv5=X;2YZ2#?yjk_Bo& z^))1BP;r6lDo0tJ^Oink-~{^2^hbW|TtbXrbbaRApXKipt`T)r7ei4Op(SSob!&u) z2z(CT=Mkuj*wr(Fy5Ck>Y^*-ljTv|PeK`iMfZMqNP>gw8 zR~UPUQ8j8{7Uu%Y|7U~9Z;U=vjYUg|jpEq>&b^F?jI8ra5@>A<9cKiYpJgGY^DnaT z{VWYu5rh~f(-}eC1Ld9I6YanaV0o2sK8!!REuQxKmY6f`|9D)c{jLq|#Y@ZW$wgj< z(&N;PZsuJ-Za~}%UwB&>zakm)PJFXdetu*KA?(e|k za-Q`mOj5PbG#w|d_Qdrl(Joea=#1x#PXyWS>cnXU2=YQ`gmbdky4G1qg3zzt|-+-K{zAol~ZTFR{d;n-uTpM z=Z({Ncab>`Hyl^o@c8eCSgg5xJ~%Uc=Cm`z!^UZfs!yg)lehmj<=3b6<5+$7H}9&( zH)o-b7as($w7uOcF_^j5@rIf3{H0?3aO%gbi+47~XE)U~A>`rBlRL4ID`q_vQ|Yvg za0FwEhIRj!V;imb4tzQ>W#f(nU+sSANt`yu+>hRK?M7>|j|=g50n_d4=7~K(sYMwaFcTAitntz zcBIeg5d%&fgvxI{^*xY?3#`Y!r!BAoo&Eyrab{5qtO!)0LqSEW5Syq+TQvY3FSM?d z?JDm4r`((%Sfqh8%SWf2d11v8pEJuIL#aD^*pWs|=OoBN?eeA1Cjc9ltXwr%^$3qb zw3yRrun+*3IO?%qE7^)nE@qreajbg)JG0c*P{)bLX_U6v3UewFD!JI3F8Y_cfCSie zt{p(h6E7y-@dIR`=S{KVIIVIEV!-47ls9)KnsE~g6Y?jWWU_T`wifK5);Yv&)?iHr zJ{4;^OvF|C;syN_+MjGgE)Ai~r5HBcLXpo#?iBj;De=bBq{L5Oi2jFwYJQ(@CFw2%NzUS9M2^?p&!xbE$-)dF}bO0>7+i*D36AxIVp z)^dvitCW`XrCMBGpiEIL70#c4mMjr!fuoHdaf~yui-p9A{ZNbk6=lUcdRJscsgvv7 z6VvsW4JAfnB0>D%c3`G1`C1KqP9zB9COo?gyst93*pp12z+&CTtDKPqB?pEpVT~hG&OzB@up3I=1bnHTMXePh>z|^96Qb} zYcyas!X}gh44Vy{?q=;aI0=H>VE%(|N%hUdH>gPrFP#>`Nvz$^#BZ~9KOA4fBSy?- z!*t#p#0B6mM0w^R2TC4&*f2>9t~h2+^3LQtIR~-MTlYf=b#I)ehYUY}IEI2wqj5+9 zre1718q^p=^TBvL?Iq6U8&30MDFgS*q6~Y1m(mNov?lMg9yN0Ka2=X&WPx=z>~w!d^@wkU^x^HJVq*k4p;fYZ$>&rzM)afQ4FP>p#Hj)LK-~oDAyEP76}6hn zsg^PCLo)So4J(YiU)AT8P~JX^NbZ!`6n74@h?T}SSq;`y%mw@jr4;vdKW8mKy!01| z^uFrpx$NtKSvfW$5ECHW0$nadUAIns=`J1@)PN9ROyn^`ehd`mHD$&`cV1)FLkYyd z%~RGeL}9tPT>WB#&8LGUaoW-J80Uk-yDVxYT4pw5wp9V#ucL>chT8IG=GJraN!- z-F}*-j)?KN3hhCtopu%yYQgSzsm0yzS2B18(MLP4oVpqH1SVxi>@!j-1%m#0k5P0(Qk-(bqSc$;L ze+LQt9bJ$;3LhAU!rX>IUHQBc;VLNne_n)fn8xo3?2p60dpa6N#r&SYzsm%U{f-m( zIfzSq`uh@nHa|%8S+t1W(-=%urv*g71?Nr)tVe$!ox`PVr#)WzW7S+$EvlC@7@7Mh zySRF{QY?9V%!J2xD|izm&FYOOf25m4GJOa(MJjS8DbsmEJIPFbif!{JI?BA(=QEhZ zb2{{6T*WQwIpAsM zf!93sQzcwb<`N_lMhNSXAaZ=^SWk4($@ko6O%J6%&MFg1JNh0=ElI?^8{T~>uGg81 zhT_^(H;-V6o?d4;x~j;`f=iUwKl6Zo$IObd)(RIR4&tB>nWw-ZDSz(Neetqq(CE=r z{sL^k)oQE+kgi^gbj&)1GnQi;#MRd%B$p$&++NC}IKz_MsRHa=8?>JeCA?n9Vs+pd9 zvLx=qG(1+do<5Gf0Z%|OW~1xNs;KD7vQzVqL)HsyyUKuAPJW zN9c?7_!B~I92|@b?^qI}gs)twsuf#Si_gW`GnHxaEN>wlsbgcw(xSf>IP|mfM z13=BXk$3K!`h>(@^LWz^;;pVYLuX`SVjx1MGeSDT+z4ocKb zL(WKvA(A5{2FzJVck*USZ98vQd&19!IKb|Hzff<`j$ zw6Jdq`V0}<=6VZjxwEIoa3UfCfZb-cG%xO;Ibq2QPl|zkSgWW8`PHZ*N!af2KM!)Ls z`q_dgAVtFoI!erqkCT26CyDnPuxq@rKv5`em~oFpVyaG|3NfIKF!y2W>eOMx^^Jz2 z6Lxu_UBz^Q{f4)AzixJ-3B<&BJncT zpKL+kLgE7QHt5>q(6`CB0hx@>{=}QivZh)2*f{RofT331hC%mOJ99bzz{egF-~U6X zP!NhJkw^`?McGeCA9oSaS%{docl*PqAN8-S*6I&QgJQ;=+T(2CdtG@uRY%5nXW0gf z9CwF1g$#ubjbji(_FMd$BK+&bZYUziH1W8y2v1rZ)A5TdHIGVrA2DYls7xNJ4 z=|5bp=IKAdRJ}5OJ^hE5(0>OIrlj+O=^5MMwn&l6EWFx>6sPMg#TvEkUdq@Rg>u%XKIQg=q^Gs-}B4UFlY z);HM$kWw^N$mQN(CE>DHHfep0-Y~zn&XLwciMEnQR`?28!JQn!#Er@dK5kqW!3T}N zCXI~SV$pC_6V0a-iph!3>mbEQa4WJdun;_5TJag@+47Z)XTG#H#^bQTFk}H!)CIV4 zR&8}g?;V>IK9)C3Xpfr9seCXIREBXJjxp;_vE5W#r2K1~n~Q>t7hqNnH5f5sYhh-{sFVT|&|fTr#-s7F`%3ivhQ7JzSt{Ui z<)T7@i*kZ!PuJU_hLB2DBX3Lb##(o>z&%#*TNE2B(BQ7rR%bP04M*FJ-=mswRoC)DJN- zX<|}$nzKucd&oOHY9NZtrc6a9u)j~HI2aJ$WU?jpB>o4D2@{~Oqlp?^Se^A@hH6|7 zb&ODT^)p-1FTX>pP)oxA#a(~V3{asK`cjr!@1%Va=yVUNWq&u8wfieEgwo?rI~M>Z z1(lcY0J{HiKa)SiI@sYsi4z~mVa1-)x%9)Ob7|4`iq_g(`Yv5aUCN)9x%7|983{WqHkBCNySn;c^I>kPHCIDj~R8#adeb1?=izV_N&-DIJqHy4(%YQ^DflX z6o1nsRese(6qiTDV9C-#NwQ`bB;)N(Y@3RIP>fTZ%nK|y@M4IzaEq+zy^&e2o z3{h+nJCR5ny5);-H}9=a7}vzC2kR5qBOQxfhR2Ex;4d5Nj-_LTSO%Yl(Ch-zEYbnI z&Bgj+HWnUL*`xJ|OIY?IJa^#tOl(`M8F>o$e;)rI!S@A7^QdiV!kB~FrY6o|i3U8I z@kA~YO!Ez9Y z=p9DRVSLJ>7BW^AFq*aBuEP5~-td<}{E_9^eb{R46veJrgT|L_*L zduB#rE?YAP4~ei7Z6ITgY5l&L(%=0v6IU_+i;7xLMpw+S4fyHBpN;PhD<4xOPs~hQ z$&&M&ntG6DSB$t)7|o(oN}!OzAvF7vs>Y;W&c{~)Of`&LJ!r36w_6{|kt>pLrJ}A2 z$7!i6XlE%7ISagmoZvL+y>$TZL9K&lC2YR`13aq*!-J@mf<{4CZAgI*BcKZ3ZNslA z{I0|yjqjvN3NYC_zpZ>jPT4LLwkcKz&X$%OJlhvKQiG5v*6P=zXZ!q^7W$7!Ypj#_ zo%B507yGov4Ql}@PcGbdj^x{aPT~RseL5QtIflJr4+wJ@wISCn;MH>y*E830Jgf2R zcI3+889}a;!z&|B|Ja)$^oCeS;}ic+DPaCQ{;UJD62<^9IxEp_0NyQle0o;T|CBXK zWHaCwx6GmJzH~oCeCGRX5i_=uld+kJmf3uBywB>jGpUD zIB`v`CFfDnn9rxSb>Ib3;@}H>8Ofvn-DsoBE0oi#7?MqoQ!yq+(-vH$$UOIX)BJk|3C zDMwDp0zWDAQhi5HP60aPZqEgYJfRQZSp!UDM2?7U>ctdrsCZBxK8PdAABSVgBQZzm z>y?_wFGE7FJfKngxH5Pt-Ya>%6!l*qnA~$=ZMam&Bx@Oz7Us}8m+}`1HlMjLvDrXh z*W+0!Ep=rnk8eArwLbTz@SXU};2A|fZkJEgB}$hn`Rl}xZylK}{W&^2ktY0CM1rp* zds@K?UdR$M!7im%aB5(dLPOW7unca^lBFj ztIP35QJJG0$0TYUrEw`YsaTUxu*u7p#wWc+;G-ii6j?m_!k`jWQhx76QvSh<{LyEl z$TC}?^3v!d|5~C8l=){JK{@d6(Tfs;272E+0ltI4tA^4S3+|6zoOlguE}W*CEAqgx zRKi$~@i&#Yj_v5cQ;mMu298$dBK2CMXz7EEi3=|V92&FBY3t%&%1QCvI)-d>P-UZU z4X*=fwn3cn%PmkRO^MZP%rZQcRI*ah911C5-B56Zm>5B&zJg>hw-?sv^`^?RYAFvmx)q&=CZ^n z`YPvkongQb!g9^AVgvb_m&?X5U9}(|K?s;7Ngv;3GKDtj3sTeN8&v(T2|9FLzV?y1-olvi`s8$mM6vJSKe zgC1;2oXydVPM$~6F8+J^JeV-}8BIUh;x~-4?M@2DH0+cDx2M$ycPkZ?18!fdQo^nN zxV#QdrH!!-XxmN=u$q~=_9tyC*D+)x*AT2V>!gD9OskKBps;i+7?2JvlvW*HSUsdt zi>*x{J=j()B+|y8nWIg|6r>Yv)nbZ}Xe{gi^{Fxd>%by4&@M{6(f}d0$V1L@ZC_>S z(&Ir+A+~i|^n&*|hj8cAw1oMF9I0m3&U|*?Vo@dg7yJH-Eyyu`J#4EEO|MDKue#9( zHFxio`B7<&?FnOF%-Y|cxYsbytvm2kqerQ+eSc(4^y#4`q8kn`@qM&eXZp|!xyeFL zrckFosc^|)okCeEiVoi);7&s_v9{Pkkg`Lx=D`kMYnJP84@kQcPY?Qc8pe!6OQjWu zm-=RYxmFZUkWT}yk6bO}KYDcq^3yj)4^{>mZ$LC?Id^nT$ba(1YFK-5;x6IHSC7My zR2bB^rJ-^<0K2Zq8W0hVpn7>k8#TrO8; zUn}ypB3~==wIW|D^0gu#p)kin`J-Sj!m}7pJDw$YI`Ax&nh1qC+T?E${=XPcJDw$Y zI`Ax&*03f*VU9)ew;2C#$Fl@a2cD(UVz!1g5ejoGmcMrVe+ixrJWElEJ!7lcBGyJo zi}CPp37!r-OYw=lXV2JbwurS65_9pd1J6?YpBQ5A*)z79En;ni#9aJaia&)#Vu-zG z&)90Vh_w+Cb6Lke9ZQ&V>R2o@&7u*#bq}0zPX2-?YHWB87v{ zuNCE6QN9)BTT#9hhKQp?n+4x1oF+ z%9AUD@WCRKUxf0DP<|20FGBf6C{Kp=MqlD8pY&C1D8pY&C0UY5w)#p&8VRPm~67 zG`W(TMeZPlNhM;M*kX^_YSzrs{NpMFSKKH`lm>D%xssek?jVIpC1RS`Vvm)doF%EZ z=_Bt&c}gKAiPAuhCRdWP$Q`6GsYFZ@TkJ7g&6-)-I`xH^^0j?2=DWry)6}2Tb<|7L zA;cfs&T@Tl-(+Af_hSqg#2Ao;m2exz9NP9HFr#kAC^Q;-HM9<((mp$Z)LXG}4YU!| z00V9B5tZjbq+{}AQ2!##H=I0&%jFqSc}_CVUU*xOdVcJ3M%H+?O(%N7b=tAxcJ=EK zUqV}8X7Bm31j$0z-aU?0!zra}VsT-(M+`5T6l#j0FO}4wVf+3C4Z8*QKT>ZY$U?3D zlApdXs;q8$Rn=se(_`gVQAQ!vH(TX8f2~u5KY)%u9`n7S>%lZ!Ok|(bf(|EKoK(|j zVLv%B;skamb}7EAi45_=Uz9J+osQp(5^64OokSh1>lvio2Jp+p$?H*q!opI7TGJYj zeMMpK1k#X8ti%>0O~_KtwEWOl71YB>J%4vK&Ua2fOQzNPzNTRAM;a35m}r`mQ>L6G0MFlikDBvSAwQjdbwK`d^iyENGgZrX)9xb#@$Bsla9)HomR zTcmT@2Zm5s;1qHq9YxBG!e!oJ@D3LEPqM@{;4-AmEWsF}PV|6%-~?a*rRWIYgn%Y_ zH@>?I$JT*wqVycBpCk2xSy2BGzCVPXBmIC(d)@=EbPf}+nzOqrXza#(yi*Y-Y9v$Q zSGsPhRuFFm6p9<0Q;6M)l1jjC#djNen(Maw#9x$HyYmuP+=&e3Jmt9IuHv!{*50EE z9S)a#Y6YFxJPy=!DUpwawpAO=<5 zoD^T=JDMUX!u^22BR`HMR@$YUY zH5r+Uelp{y6sD;_Z|xPK7%3nr%vtfbw51fet69N@O6Bc>cg>4^1BNU z-F@t5s@uOtDm}U9r1Rkcd?;eBNBF`8h1A;nb5-^cq(wg*aejCTsQ~@8`{9vaIBy3phSGz!@$?srH^yV<+%b^Z*1T;bGf>D3<(t#n zvbln>R$eae%cY0659hLlYdt0WkF?Zq85Y0wOYp7>-wH(JD57@nh&D%4*g*jnpp3C%YSH)i#22)_Q ziz@VYdpa}JY!|lMIeTQ#`>>!pJuq-_1@$yeQ4TBVKKthMz=)k%7X;hmb823OK#Z!b z?JbQrM1$oF&`NJM)dtv#blzUvG52C=S+3w(2`kobTzSJ>40%@%4t5UpX6MavGvo^+ z+nT$&fZc5OC98vVXkftZF2Lf*H?M$=VdZk^(YXa08mcQVs!EHhkq6~f;Y-ghY1xo{ z`(@|JyOBa>pn1?9%;rX!bPtbSu72>};im=N+2PSEJSbgV03c1gGUY>2WNhA%%?zn( zCCB^=B!}~(`e813p*vl;s_akO(>bfKKsBPM)Pk-q`?ltCW%482kh7&+!+SFW1FbKT zCeW1YNfWWnTQft24uxYh1!YIN!OsgLkV*s7Rzad%8?%_=c_PJa$)Y)9(2Ac5*@0^^ zZ3~wzR!A@3pRO)&Wc&3}zM`31+yp_0j6fdSEosc>x|_))G>%=XINuC=a_dm$wh_Ct zr(;F6b*&yMWD28tf0qW*^gF3+nnmS^*!83f>8k_Dg3f+#H(M(ubh`79T0Lj_Zvr6MBKC_4NBRP9z zdN|z;5nA!!8A;;dk^J_RyF+8PCKQGeTxC_On7ol!y4zZ@xaA7x>NF(?dN2_G->Aw&v}gO_z?-4h~Lz>HI2t zIGfKD?4He+O#~0%y_{PDA*EOp=8E@YYo$6~nkj7W$)#@}y7}6nY>(ZAiRZ`wFgV`W z)HjgbmWIzzC7GVCY;PBF{?ZqRC@xckbisZZJaj{L4xf6O?Ont0R5q{Mym5m_l{@n3 z2Gh&;K1b@+Yn3uJY*;QCJO7G%p8MuNoaGo9Xa?5BY7Wu7L2Fkl}+YU^=)4?)t5D)pb`GFv> z$YuxZ^iX#&&`OQ>TpkGYh7n98Dz-w$TyLNWN-658wEM9D(HFWj=V{xkFiAW@&duc6 z%S@=U7|ntF9ZM%RXVhf8w9m4%&>ylW78nLX7R55dU??=Zrpr*s(u(u4RZOORBEjgR zQ)M`0)k^qoyL1fGvxZG}o(7CIXV1MR2toB(wt^9+b@R7@gVaFRW#@9)Tz>R9sXUY4 z*k5?OibNwy?6FUvr6IfEMmp=PAbq8ydyf%TRAjOA z4Mw#r?vf3Ce`DyvSpR#IQPsL5Fz(i@gk*1M#1CZ)t0`x1Hma2~w*>=*KMGy8uke=8 zWe4p0LznHd|F~)yr*6>fm_G?k?;*SIPmMt1Qd#kq+0oXvg%21NJbhyZCMsl(Yg>o% znZ6;$cEBg}XI1yZ1Jkzf&!hGO5kPMZ-2fDRFlqx}?7uB^15o(wRZFgmK4r51h0!cy zjVupr8|m$}bIoFouaM6-XYAW$O=ufvwXwGsPLh4b3nv)S(}i~!`kF31QHY+ib6lI= zjBnSBbS!(P(I_Bf@i@;c_O60G)U#=1XcJ=@nCCBzIVE`p?OdOYEP4L?F5?{e8D*W- z^4^?nzuQo2xIW;`8#irX{`VLcP0(t%B>&23Q+Y!L%fJOY_g-V(1VDN*$?asI-CrA* zRmiqJoi9k%_ZccGpnR?Q?4bRA2c6|}*oZS6-ETBaR9`l?I^Dhf0~2P-5m4U#pwk?| zpBg5yc$-bPE$r&CySoNP3LkR7=s7aT(WQ9D?jf=d7|Q5VWKb)TT-FEc*?o3S_>1`- z3TY!?dHKV^Mx3%53M?zMPq92V`IdsOyLROBVj|8h+v#>yO z;M=ztJ|4;_9tWs-lY+Sn#DxfbImLs7NQel!%OBrNb#RU3S4u!;-(bk%bMmh}Py zKNE^beq`Wdp@@X3!Do#%GPsPloYg(y!k=cael7|i<&sxx!~Yx^kmFT9T*-o+sB6+9 zv0y)MREV^#2xd)Ymtzfo!KmQvsR#@D?u$l+xW$SnuCxRkDw8RELzn4O z$FCZjY6@CH2EP_r3Z&c8(XTtUzutG{N|)%bZ$##AM*&D>-;CUF(E(AK=l* zU3CI#qg<9b@(wF3KRfbgt0oyGDf&(u!3?(1nBoGjnEVIcWD_^PNropBjU8ywCsZOnH3oeeueH zpeLNZ`K|GCDeZ$US#gK}d$*}r*N5$|R73!Km#LJ24_4MPB0#*`tSyJprT@Ab!|WYM z7w$2)N-u+tgcGY5cN^oqW;jR93T(sdmk|p=0toG1o6c{)&kX0q@L{D#3fr@}*P9hi zlo+RLKAe03aSNNW*}@)&VXBo7A53u#^GN!w!X5(dGuUf}o1+#1TAvxr6y6+}isFecqz8xpC^D1wWO{ou-3WUeeTx~+ zx8--RkS(MKR(SyLH^a^Be1LiQ$^N*~*(Viwej9dFud(f$>>M_E{7EE!&@A~sjf8r} zvibVqfk@0wSV}+qStQOP98W*|c_jTnP^J3et&#KtA?o_!!N@36`r&Pn_<^l*^uyaD z=?4dp=!d_EOhr#W?2F8#zJ7Q|B>f;9QLG={8A(47AoasvM$!+2QluZ=6%yPQe>Bv+ z=kGR^_odolRs*+5jfy(d_m~x;sm9TX>$812n7;}sLo2b7Oo#K{kTSG-Cw6q{fc`q9 ziV#3IrE}>)9oqX$wQ^A{?l%vnbA^>zY&L^+Q`*<}hm?XMpn5C!htwM-06~%un9e5r zYCFt6>iZUIWJ(u#mp*8|wZfjTad_5mocPjj=GI>oI9sb`e#i{B&{0eQ9IC*k9x&ff zp`T;jt6Q9t8C185e3exn$}m^o68Mn$Ty2#UGA(l(^IXZB}IkS+>Z4(W}ql( zJ#-6)CGf-#xF77o!=a1IwEQDxh4qcG#B^#$-O4rmQ8Q4KPHEra=>3=(D9*Y}*HJmj zKN6+!%A5OfGf<#)Y2(Ga|F>qKeFf#4FA)CD3>05KrgpV9by-v7SRNIek)`EhXn5So-Qa1|FH=k8-F&K9Js4X&YGNB zPnV^)&zV}RwaV7aNZ_`G{~V0J%7GRF9S%0Ol$PgSwa*9Rj*_Cf@%9C?LIl=W@n)lC zkqmsIB=d{WfT#oGj+n}4T|V*~147lqsMpYCU#eb&y~4y67JV+;r{V&c2OWT_MY2rBg-3nojY#nn(O5WW|TFUml0g1`mJ_rtYA=}dv} zgQ^J$o$HKE$HUkZQtJ~{)6cgE1i+J3(~kf=^8YZ{fT>~M8)>Bar_4YbM~ln5%=4o# zm20f?<6tIHapk@pA|3eGs;33me~=#@NRQrtO;;x>`CG;)54ZFxoGfxjdMG-zC7|XuDF>4!dRwQ|+%vaX5`OwIkT>po>&D_Mo6Ytf62}sxx9n%ajLh`>f$yyy7-GE4$94?D?XNu)tciYSZe? zn?o)P2chu_aw6$wadyEJHKG$_s-I2jE}`yy$}SrMT4 zmjav}fkuSlAm*HiU>wZMiU`I*&ADsB6MM}-HeGO<^Ma^woc5d-fmHtV^ZW>Mpu`DI z{R=w7qeg)EtaIV|h@j*YW!%yts&IDHhSAtim$b}T8?j;QaOajZ>V*;bQLv>H;YCsV z=7*SE{K|-ZbC>(E+L#+v&GWjOx~2BOeX=y(5FUC_v;!j@nj(mlkIlI^hHsL~y;`u; zyz8Tbllaq1A}AiWUBuFhUKYMVFU7rqI0(_@ml9UFG=gL}km;7bY+d9Adfav5g)fc_qkYjeQDLlUTX=0`810LeMYYC!ll;1k;kk8# zjoaV2T)_1h3A4tzcFQ9Oqz7=NT%OCVU)F{iw9k@VRx&cKh+tW>c{kd*{sH@@bYc6- z2&&lYDB6_4iTl~y=0dvPUbVRfo!t!A`F6X|A;Q)mZrKvL`Y<;{?6QIf+-;0t zuM0IbU3XJN6|gdA!yAvLWk-ezN=dyWBJOYr(?E9A-F=~8Zn~*u9P$vGROULFzH z<`EHD5Th`Xe?>$F@rT*Yf<5@kh=b1RU3NDXMzcd3M+!K#-@YXxywV}|RS_9jJSJ*9 z{DX*y^M-v9imr$a(+28WBRB)dYtqMbL`~$dDuYfOQf`ZYFU{}e0PYTRs~l&iSTVxp zz@7*=5<`0J!o}@&)CmF_(i@>6E3^5*Y~C6g?TcV4J3u%&0Ho~^w6X?CV)!xaJ5iEBNOy{bdk@-W~)46KRK)P==cBR}N!Q#oyCS&U z6)>u#(Fn^XE);5`S4Y;8D-p*lTJ1HF(GF0!0vp?*5Ceq);k7kr8}_E+a_#&d)}U<; zC`H9PwnpXoRX9&L!`qE+&KB&|JC&xqGqO;w8o_UxeiuW23j7=q-E~xdHeBr)YkU;U5V&2yqkVBgU*}_`SD{lnYn~ax7m30BOav+1KPS{xK?tYiNd!sX*YZblO zh-}5Upl-x5Rhd7E&UG%l&A3>6zFo{(9ZLixwl1E%v&sw0$6o`W_2Tn)pE@Lag6dm~;{gd2cG@K4c{C zz&22Q|IGoTsq7`@5QP!j4LEwpNR7#~awK2K4th7Lf7qBkCX0U=`rlN26O^;X`(b0@ z#Cw+1He2^>4Yfu1Bb6?~b(aOabx%Ko1EHokMeU!Awra%KIb7kBl^970zh0epV9cYz zZt5#7oBxz^H|@CFM91vw|8%gv?W96&_Vndv{JUhkx^jg=ri)qy=+eW E|B*o=MgRZ+ literal 0 HcmV?d00001 diff --git a/subgraph-build/GasVault/abis/GasVault.json b/subgraph-build/GasVault/abis/GasVault.json new file mode 100644 index 0000000..e0d0f9e --- /dev/null +++ b/subgraph-build/GasVault/abis/GasVault.json @@ -0,0 +1,451 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "origin", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + } + ], + "name": "EtherUsed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "ethBalances", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_targetAddress", + "type": "address" + } + ], + "name": "gasAvailableForTransaction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "_stratRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_vaultRegistry", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "orchestrator", + "outputs": [ + { + "internalType": "contract IOrchestrator", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "originalGas", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "jobHash", + "type": "bytes32" + } + ], + "name": "reimburseGas", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "strategyRegistry", + "outputs": [ + { + "internalType": "contract IStrategyRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "highGasEstimate", + "type": "uint256" + } + ], + "name": "transactionsRemaining", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vaultRegistry", + "outputs": [ + { + "internalType": "contract IVaultRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } +] \ No newline at end of file diff --git a/subgraph-build/KeeperRegistry/KeeperRegistry.wasm b/subgraph-build/KeeperRegistry/KeeperRegistry.wasm new file mode 100644 index 0000000000000000000000000000000000000000..21e54f1b9adfe4efa46d147b2fe6e0a171c7600d GIT binary patch literal 191887 zcmeEv34mQydH-GBym_;{V3dc ze1WVleqk50B3n^nJoKvv6(U!({W_b9pA|ou&v@7C-r-lb{)NXLn-Fe~?&_|`jnQkm zhOQhNZw7t6YsW^fX^c+{kBuJO+_t50uKl_A%5BZY#G0`cjcbFTYj|{B6yLHFp^%~zti2V6P4;k?G$;mt#v7Ox*4+q}9tK0La?rB}T4&BLQx zCxXxvo#Q1n$4o(Q91hKngM539&1x#*H_)iX>xQoxUe{Q+Y@7SWOz#_8Hu+!o8`d1& z-0&JU*DI7$=L|1-%h-$D$7bnv_~YPp=a4qtk$E+J>DP5+#;Q-hPWQoN&b0p^o!Pcs zPmpVAuldT@I``7lcI9w$)wp|I)_L(d8TGQ8QQy>9-&}pw@Oprv>4X`G@!<_uWz)>3 zW#lZR9$+DrkUg}a@tmPeTN^>-4c|a!_$CC>fEFh#IX(!yjPo-YHTvWLSeu;7h9(-P zoE8M}ccaImLQn`J(3&`y)enLb#&Ose#)v_FN_;^&6bE4t;#YqV77B&gK~Tg?BnI8x z-F%26l@E`|)rJ4N%6!kVj8F;dLG1o9p$Gr)dPZ?(H$KUKg&>TO(1m}xj8}?9)IT&& z)y+_vh?q^*{|ZtWy2eCQA0r=HuK&$3*(9D@sT^=%R1CvX0oBI%9{~#5|AG=q>-Mp6 zrdz36q9BS`34=H+@<+r`iMo5$f2Bep+!7SJSatEUrH4R{lb~;Vpn{N35rddPfk798 zB7<%QB?dhVq}Y^7^s-nVgMJ2O1~VAUWKdx+i@|ILa~RBJZ~%h?863o59)p7!9Kv9L z!F&dXGI$1q!x&T<)ELwmEMTyZ!Ql*!U~nXZMGTH&@Jt3rGdPC9u?!Y7IF7;b3{GHh zB7>6{oXp@921^*6%HT8xr!zQ%!I=!sVsJKta~M2}!F@7-ACmCH5`IL&`z8FSgbzsg zpo9-e_^^Z@lknpbenP@eO86-WKP}-S5`IR)&r0|?2|q947bN_mgx{8#{f>l>N%**g zUy-@`s)S#Y@INGcRKl-I_zemFQ^Idb_+JwKw}ju4@Y@o8N5aP>d|blsO87kqzc1kr zBz!``A4>Qm34bi%PbB=Qg#RPq&m{c0gujsRmlFO;!e2}H8wvkc!Y3u%A>j8C312GV z%Ot#B!W$&KQNo)fyjjAROZW;2Z;|j;32&3|b_ws0aHoW?l<-v&zFNZ9NcdU_Unk+6 z624x-H%NHD!2L%hd_cknC45N2hb8xNl-;_O^{#kUZ6ry?_*MU=a&IL(h?hVf8ed*Z@Lb;YG`!brpBd> z@y){%l(x>riw%u+!O$#~a#3UGn#QxYHn!s3mE|=M#a6Ccte8jKH(UQs#>a=YE!(<& zePcZCujrSMK~9r|xID|fI$?==H^X~((uwNbOz+*2lhwP5d3X7+t#6k3F5j67XZtTr zjdT2$rpmcc)#)me?&sgNw!sm4t z4{cdK+8p1ein@vqJ8BnMy~b7N>Ab5q4~;h=mp8|U);7
<@6V0o>mAEL9HzONY{ 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 BR0se7 literal 0 HcmV?d00001 diff --git a/subgraph-build/KeeperRegistry/abis/KeeperRegistry.json b/subgraph-build/KeeperRegistry/abis/KeeperRegistry.json new file mode 100644 index 0000000..b99a5e4 --- /dev/null +++ b/subgraph-build/KeeperRegistry/abis/KeeperRegistry.json @@ -0,0 +1,516 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "keeper", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "leaveTimestamp", + "type": "uint256" + } + ], + "name": "LeaveQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_subject", + "type": "address" + }, + { + "indexed": true, + "internalType": "enum IKeeperRegistry.permissionType", + "name": "_permissionType", + "type": "uint8" + } + ], + "name": "PermissionChanged", + "type": "event" + }, + { + "inputs": [], + "name": "bondAmount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bondCoin", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "changeBondAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint16", + "name": "newNumKeepers", + "type": "uint16" + } + ], + "name": "changeMaxKeepers", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "checkLicense", + "outputs": [ + { + "internalType": "uint256", + "name": "licenseNumber", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentNumKeepers", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "targetKeeper", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "denounce", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "freeCoin", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "coinAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "keeperTransferDelay", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxKeepers", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bondSize", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "licenseNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "join", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "joiners", + "type": "address[]" + } + ], + "name": "joiningForOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "keeperLicenses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "leave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxNumKeepers", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "queueToLeave", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "registry", + "outputs": [ + { + "internalType": "uint256", + "name": "bondHeld", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "licenseNumber", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "leaveTimestamp", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "transferDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "withdrawFreeCoin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } +] \ No newline at end of file diff --git a/subgraph-build/Orchestrator/Orchestrator.wasm b/subgraph-build/Orchestrator/Orchestrator.wasm new file mode 100644 index 0000000000000000000000000000000000000000..ccf6943621b8b91242ff4475a0e67132ded41d33 GIT binary patch literal 191847 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�>oa4AT3HiL}lZtK}1{kq8Oy0h^Uw}=YYHL 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�D3{J2jx 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 z zCki)Ti3dcTj`pyn+?$o7XQ2w}R-k@EFMp)|A?z0>wy<9C)o^UAs{x^|Tl{O`C^b@X zNU(iz`k;1bJsO8jUQplHtusX*74*f+DTqDD+r@8G{H-v!0h#w(lcb#T1*^h%UCi}e zmO-$@H*3wqt1zMrQ~%JGZ&@mSyrhBC*RNaJKHbT7;be$!$3TNrMOX)F&4R16*X0Qi z^*hm^6iR#i-EhKf7<2iZ`JScDf(btrQN7cIcF8R1vAT7RG)1J!uPK2v3CLiwY22wJA`ZjMk2|GB^doQ*{#( zO2O4|hoTrgQtJ=vre9#P2!J2eO+Nzg$^YYU8ePM_uL`C5r>#)C153+$%=42dm20f? z({MIhY2|^TBpvu!-7^*hn->Q9(nD8bXU#L=M7iDqxAbBhA8|`Mo68RM=LQRJobmI> z?I5IISeJ;#sccbX;Km>9b_xr&;P}&gZ{eS;i>v0wZlP5@UgpEr^eUPAygfrffnQn| zR4KrdO+C=RvM!RG!J6r!RV!E9YwUHa)^I0|j-Ovwh00x39@J;8Y8#yjeVH!D%lezD zXoE6O)A;jp|Fd;zm5%Y`%4;&kjhU>M|6i&$naiomc0uoKob$zQNez6Ao!&i4-X<0Q7i3OQ4GTVnJr zSlG=MZ%dq-E(~S6GCf0`@}hGvdlMAx?TJ&g_qhT0^&P{q=N)FhvplYi#r!y zyKc$aM6}hl0G2>$s^JhBVeu(|(s9+gQPCnO0vPK7WOQ603s(+E! zb;a0dOG^P5MJ9XA8vELDamgf5#>a)SZvE;NOOgvBob||cu8!{MYML}*NpuKeYpdP+ z$1REu1|iex;OgTS#{x35O&WAUJSgrQxH%q_wmH(46JtOL4)i`L28{^CMa;=D!MK?bhz2?Lx|n_QA`!5NogY%o z^Shh6zVW~VvP`}*I`oo236X55dF%%I+&>Q^0*h5ZoL)Ix>`T(LQ%!To5zc+G4|)J!@WU7;SUfBM9YoGpEMTx%>a$zQ!HdULLF5Ej7Y0##ziqivENa&DT8CxbNRK! z^k!%A+6HuXEnMdtoo*lUk{FX5zn%W=DN7qck3|~?vzwPW>2B=)iJ^R@bzNP!lJH7r z2s?@TGX>tSEOcHLV~8lY+(RdzI$~Hb1hqJWJu-y0JSL#kgB#%TM_;du3CO4BigocA zZmD}~4=we804rk{K1A43gjCx?*8t{KF}tkb0e7on*y}<~P1dcBDFW05IA~gKFk4hY z>NPQOx7Zoz%MC4ZZ@aJDY*!n07R<2 zAvW3p3b&SHzZPPkpb*~JfVN@VEbc=u{AmN)=7LgGyk&h{o?nc6QZu~5=IUJ0S+Ye* z%3EU(%Eg1Yb`%!uHZ%696rFIJ8C#l_>XzHh*kl!e^d;WWAXp^9on~y@dsKXr8N=9A zqtgSm0{7v*xe+8#{H2)pEoN-94@dHBH)G2nHI;d*8GCdpK&!HSLn6B0X2!O#R`6aE z0rqzD+PGs~fGz6FAgU8KR=R7mN8TOrna;C{?lNOrF&?OuI8iF|XYsktgSQs<_4YaM zh~Gf4Z*i?tRMfsZ{^0i=rGIY5aHpve3)^o1hp9OWaffwQ80Rm{7@nL`pz!Hrux7Gu z>tC8NX2zv3mt?!8nfJt(Ry3taY#K{{)fjM2x1#c2$48tM7Vdw7tHH21MiM6Pc@GR_3V4h7`_I@b?dh7jIS@&ZC#k_9(r$lq3KQ4 z-WQ*E{|*WTGvyJfJ1oQKW)}Hh-!qQTs_|%5rHyi{!Fb~>_(_q z3X3rPY{V^J!=jo$7x6xe590)bV z0dHS0XV)`~-NO~WSc{RW96u8BS~k6@vaa$a_X5%pw}}or6y(d{`nE+5%%eyY(fXC( b!qCpne6g76 literal 0 HcmV?d00001 diff --git a/subgraph-build/StrategyRegistry/abis/StrategyRegistry.json b/subgraph-build/StrategyRegistry/abis/StrategyRegistry.json new file mode 100644 index 0000000..5575c67 --- /dev/null +++ b/subgraph-build/StrategyRegistry/abis/StrategyRegistry.json @@ -0,0 +1,1140 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "StrategyCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GOVERNANCE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_tokenIdTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "strategyName", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "name": "createStrategy", + "outputs": [ + { + "internalType": "uint256", + "name": "newStrategyTokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRegisteredStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "internalType": "struct IStrategyRegistry.RegisteredStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hashedEmptyString", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "registry", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxMaxGasPerAction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "_maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "_maxGasPerAction", + "type": "uint128" + } + ], + "name": "setGasParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxMaxGasPerAction", + "type": "uint256" + } + ], + "name": "setMaxMaxGasPerAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "strategies", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "tokenIdToExecBundle", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } +] \ No newline at end of file diff --git a/subgraph-build/Vault/abis/MultiPositionLiquidityManager.json b/subgraph-build/Vault/abis/MultiPositionLiquidityManager.json new file mode 100644 index 0000000..f479e2d --- /dev/null +++ b/subgraph-build/Vault/abis/MultiPositionLiquidityManager.json @@ -0,0 +1,1169 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount0Earned", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1Earned", + "type": "uint256" + } + ], + "name": "FeesEarned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "Snapshot", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STEER_FRACTION_OF_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOTAL_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Used", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Used", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "name": "emergencyBurn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getPositions", + "outputs": [ + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "", + "type": "uint16[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalAmounts", + "outputs": [ + { + "internalType": "uint256", + "name": "total0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vaultManager", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_steer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxTickChange", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pool", + "outputs": [ + { + "internalType": "contract IUniswapV3Pool", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "steerCollectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "strategistCollectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalWeight", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "int24[]", + "name": "lowerTick", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "upperTick", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "relativeWeight", + "type": "uint16[]" + } + ], + "internalType": "struct MultiPositionLiquidityManager.LiquidityPositions", + "name": "newPositions", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "timeSensitiveData", + "type": "bytes" + } + ], + "name": "tend", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "twapInterval", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Wanted", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Wanted", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/subgraph-build/Vault/abis/SteerPeriphery.json b/subgraph-build/Vault/abis/SteerPeriphery.json new file mode 100644 index 0000000..7439a92 --- /dev/null +++ b/subgraph-build/Vault/abis/SteerPeriphery.json @@ -0,0 +1,818 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "algebraVaultDetailsByAddress", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "vaultType", + "type": "string" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "decimals", + "type": "uint256" + }, + { + "internalType": "string", + "name": "token0Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token0Symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "token0Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalLPTokensIssued", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token0Balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Balance", + "type": "uint256" + }, + { + "internalType": "address", + "name": "vaultCreator", + "type": "address" + } + ], + "internalType": "struct IMultiPositionManager.AlgebraVaultDetails", + "name": "details", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + } + ], + "internalType": "struct ISteerPeriphery.CVDGParams", + "name": "cvdgParams", + "type": "tuple" + } + ], + "name": "createVaultAndDepositGas", + "outputs": [ + { + "internalType": "address", + "name": "newVault", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + } + ], + "internalType": "struct ISteerPeriphery.CVSParams", + "name": "cvsParams", + "type": "tuple" + } + ], + "name": "createVaultAndStrategy", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newVault", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "jobInitParams", + "type": "bytes" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "address[]", + "name": "targetAddresses", + "type": "address[]" + }, + { + "internalType": "string", + "name": "jobName", + "type": "string" + }, + { + "internalType": "string", + "name": "ipfsForJobDetails", + "type": "string" + } + ], + "internalType": "struct ISteerPeriphery.CVSRJParams", + "name": "cvsrjParams", + "type": "tuple" + } + ], + "name": "createVaultStrategyAndRegisterJob", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newVault", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolId", + "type": "uint256" + } + ], + "name": "depositAndStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_strategyRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_vaultRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_gasVault", + "type": "address" + }, + { + "internalType": "address", + "name": "_stakingRewards", + "type": "address" + }, + { + "internalType": "string", + "name": "_nodeConfig", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nodeConfig", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_nodeConfig", + "type": "string" + } + ], + "name": "setNodeConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "strategiesByCreator", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "internalType": "struct IStrategyRegistry.RegisteredStrategy[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "vaultBalancesByAddressWithFees", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "amountToken0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountToken1", + "type": "uint256" + } + ], + "internalType": "struct IMultiPositionManager.VaultBalance", + "name": "balances", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "vaultDetailsByAddress", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "vaultType", + "type": "string" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "decimals", + "type": "uint256" + }, + { + "internalType": "string", + "name": "token0Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token0Symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "token0Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeTier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalLPTokensIssued", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token0Balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Balance", + "type": "uint256" + }, + { + "internalType": "address", + "name": "vaultCreator", + "type": "address" + } + ], + "internalType": "struct IMultiPositionManager.VaultDetails", + "name": "details", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "strategyId", + "type": "uint256" + } + ], + "name": "vaultsByStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "enum IVaultRegistry.VaultState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "vaultID", + "type": "uint256" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + } + ], + "internalType": "struct IVaultRegistry.VaultData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/subgraph-build/Vault/abis/VaultUpgraded.json b/subgraph-build/Vault/abis/VaultUpgraded.json new file mode 100644 index 0000000..e5e9023 --- /dev/null +++ b/subgraph-build/Vault/abis/VaultUpgraded.json @@ -0,0 +1,1258 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount0Earned", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1Earned", + "type": "uint256" + } + ], + "name": "FeesEarned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "Snapshot", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STEER_FRACTION_OF_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STRATEGIST_FRACTION_OF_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOTAL_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "accruedFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "accruedFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "algebraMintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Wanted", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Wanted", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "algebraSwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "feeIdentifier", + "type": "string" + }, + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "collectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Used", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Used", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "name": "emergencyBurn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "feeDetails", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "", + "type": "string[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPositions", + "outputs": [ + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "", + "type": "uint16[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalAmounts", + "outputs": [ + { + "internalType": "uint256", + "name": "total0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vaultManager", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_steer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxTickChange", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "migrate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pool", + "outputs": [ + { + "internalType": "contract IAlgebraPool", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalWeight", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "int24[]", + "name": "lowerTick", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "upperTick", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "relativeWeight", + "type": "uint16[]" + } + ], + "internalType": "struct AlgebraMultiPositionLiquidityManager.LiquidityPositions", + "name": "newPositions", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "timeSensitiveData", + "type": "bytes" + } + ], + "name": "tend", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "twapInterval", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/subgraph-build/VaultRegistry/VaultRegistry.wasm b/subgraph-build/VaultRegistry/VaultRegistry.wasm new file mode 100644 index 0000000000000000000000000000000000000000..c62d92cb5571e6039b9ee2ab0ae986d678926bce GIT binary patch literal 331298 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

9R9>F{bo3_97iQA%y6+=Z>t@$5hOTv8CSCP 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 literal 0 HcmV?d00001 diff --git a/subgraph-build/VaultRegistry/abis/SteerPeriphery.json b/subgraph-build/VaultRegistry/abis/SteerPeriphery.json new file mode 100644 index 0000000..7439a92 --- /dev/null +++ b/subgraph-build/VaultRegistry/abis/SteerPeriphery.json @@ -0,0 +1,818 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "algebraVaultDetailsByAddress", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "vaultType", + "type": "string" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "decimals", + "type": "uint256" + }, + { + "internalType": "string", + "name": "token0Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token0Symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "token0Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalLPTokensIssued", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token0Balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Balance", + "type": "uint256" + }, + { + "internalType": "address", + "name": "vaultCreator", + "type": "address" + } + ], + "internalType": "struct IMultiPositionManager.AlgebraVaultDetails", + "name": "details", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + } + ], + "internalType": "struct ISteerPeriphery.CVDGParams", + "name": "cvdgParams", + "type": "tuple" + } + ], + "name": "createVaultAndDepositGas", + "outputs": [ + { + "internalType": "address", + "name": "newVault", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "params", + "type": "bytes" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + } + ], + "internalType": "struct ISteerPeriphery.CVSParams", + "name": "cvsParams", + "type": "tuple" + } + ], + "name": "createVaultAndStrategy", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newVault", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + }, + { + "internalType": "bytes", + "name": "jobInitParams", + "type": "bytes" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "userProvidedData", + "type": "bytes[]" + }, + { + "internalType": "address[]", + "name": "targetAddresses", + "type": "address[]" + }, + { + "internalType": "string", + "name": "jobName", + "type": "string" + }, + { + "internalType": "string", + "name": "ipfsForJobDetails", + "type": "string" + } + ], + "internalType": "struct ISteerPeriphery.CVSRJParams", + "name": "cvsrjParams", + "type": "tuple" + } + ], + "name": "createVaultStrategyAndRegisterJob", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newVault", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolId", + "type": "uint256" + } + ], + "name": "depositAndStake", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_strategyRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_vaultRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_gasVault", + "type": "address" + }, + { + "internalType": "address", + "name": "_stakingRewards", + "type": "address" + }, + { + "internalType": "string", + "name": "_nodeConfig", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "nodeConfig", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_nodeConfig", + "type": "string" + } + ], + "name": "setNodeConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "creator", + "type": "address" + } + ], + "name": "strategiesByCreator", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "internalType": "struct IStrategyRegistry.RegisteredStrategy[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "vaultBalancesByAddressWithFees", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "amountToken0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amountToken1", + "type": "uint256" + } + ], + "internalType": "struct IMultiPositionManager.VaultBalance", + "name": "balances", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "name": "vaultDetailsByAddress", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "vaultType", + "type": "string" + }, + { + "internalType": "address", + "name": "token0", + "type": "address" + }, + { + "internalType": "address", + "name": "token1", + "type": "address" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "decimals", + "type": "uint256" + }, + { + "internalType": "string", + "name": "token0Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Name", + "type": "string" + }, + { + "internalType": "string", + "name": "token0Symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "token1Symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "token0Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Decimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "feeTier", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalLPTokensIssued", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token0Balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "token1Balance", + "type": "uint256" + }, + { + "internalType": "address", + "name": "vaultCreator", + "type": "address" + } + ], + "internalType": "struct IMultiPositionManager.VaultDetails", + "name": "details", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "strategyId", + "type": "uint256" + } + ], + "name": "vaultsByStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "enum IVaultRegistry.VaultState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "vaultID", + "type": "uint256" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + } + ], + "internalType": "struct IVaultRegistry.VaultData[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/subgraph-build/VaultRegistry/abis/StrategyRegistry.json b/subgraph-build/VaultRegistry/abis/StrategyRegistry.json new file mode 100644 index 0000000..5575c67 --- /dev/null +++ b/subgraph-build/VaultRegistry/abis/StrategyRegistry.json @@ -0,0 +1,1140 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "name": "StrategyCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GOVERNANCE_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_tokenIdTracker", + "outputs": [ + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "strategyCreator", + "type": "address" + }, + { + "internalType": "string", + "name": "strategyName", + "type": "string" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "name": "createStrategy", + "outputs": [ + { + "internalType": "uint256", + "name": "newStrategyTokenId", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRegisteredStrategy", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "internalType": "struct IStrategyRegistry.RegisteredStrategy", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "hashedEmptyString", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "registry", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxMaxGasPerAction", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "_maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "_maxGasPerAction", + "type": "uint128" + } + ], + "name": "setGasParameters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxMaxGasPerAction", + "type": "uint256" + } + ], + "name": "setMaxMaxGasPerAction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "strategies", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "string", + "name": "execBundle", + "type": "string" + }, + { + "internalType": "uint128", + "name": "maxGasCost", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxGasPerAction", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "tokenIdToExecBundle", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "tokenOfOwnerByIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } +] \ No newline at end of file diff --git a/subgraph-build/VaultRegistry/abis/Vault.json b/subgraph-build/VaultRegistry/abis/Vault.json new file mode 100644 index 0000000..92e6a55 --- /dev/null +++ b/subgraph-build/VaultRegistry/abis/Vault.json @@ -0,0 +1,1196 @@ +[ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "amount0Earned", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1Earned", + "type": "uint256" + } + ], + "name": "FeesEarned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalAmount1", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + } + ], + "name": "Snapshot", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "name": "Withdraw", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STEER_FRACTION_OF_FEE", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "TOTAL_FEE", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedSteerFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees0", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "accruedStrategistFees1", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Desired", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "deposit", + "outputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Used", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Used", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "tickLower", + "type": "int24" + }, + { + "internalType": "int24", + "name": "tickUpper", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "name": "emergencyBurn", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getPositions", + "outputs": [ + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "", + "type": "uint16[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalAmounts", + "outputs": [ + { + "internalType": "uint256", + "name": "total0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "total1", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "_steer", + "type": "address" + }, + { + "internalType": "address", + "name": "_internalGovernance", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poke", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pool", + "outputs": [ + { + "internalType": "contract IUniswapV3Pool", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_maxTotalSupply", + "type": "uint256" + } + ], + "name": "setMaxTotalSupply", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int24", + "name": "newMax", + "type": "int24" + }, + { + "internalType": "uint32", + "name": "newInterval", + "type": "uint32" + } + ], + "name": "setTWAPnums", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "steerCollectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "strategistCollectFees", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "sweep", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalWeight", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "int24[]", + "name": "lowerTick", + "type": "int24[]" + }, + { + "internalType": "int24[]", + "name": "upperTick", + "type": "int24[]" + }, + { + "internalType": "uint16[]", + "name": "relativeWeight", + "type": "uint16[]" + } + ], + "internalType": "struct UniLiquidityManager.LiquidityPositions", + "name": "newPositions", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "timeSensitiveData", + "type": "bytes" + } + ], + "name": "tend", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token0", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Wanted", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Wanted", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "shares", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount0Min", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Min", + "type": "uint256" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "withdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "amount0", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/subgraph-build/VaultRegistry/abis/VaultRegistry.json b/subgraph-build/VaultRegistry/abis/VaultRegistry.json new file mode 100644 index 0000000..74ab600 --- /dev/null +++ b/subgraph-build/VaultRegistry/abis/VaultRegistry.json @@ -0,0 +1,1072 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "selectorLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "isImplementedLength", + "type": "uint256" + } + ], + "name": "IncorrectArrayLengths", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "_ipfsHash", + "type": "string" + } + ], + "name": "BeaconConfigUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "BeaconDeregistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "_ipfsHash", + "type": "string" + } + ], + "name": "BeaconRegistered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "deployer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "vaultManager", + "type": "address" + } + ], + "name": "VaultCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum VaultRegistry.VaultState", + "name": "newState", + "type": "uint8" + } + ], + "name": "VaultStateChanged", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "beaconAddresses", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "beaconTypes", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_params", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_beaconName", + "type": "string" + }, + { + "internalType": "address", + "name": "_vaultManager", + "type": "address" + }, + { + "internalType": "string", + "name": "_payloadIpfs", + "type": "string" + } + ], + "name": "createVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_ipfsConfigForBeacon", + "type": "string" + } + ], + "name": "deployAndRegisterBeacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "deregisterBeacon", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "doISupportInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vault", + "type": "address" + } + ], + "name": "getStrategyCreatorForVault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_vaultId", + "type": "uint256" + } + ], + "name": "getVaultByStrategyAndIndex", + "outputs": [ + { + "components": [ + { + "internalType": "enum VaultRegistry.VaultState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "vaultID", + "type": "uint256" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + } + ], + "internalType": "struct VaultRegistry.VaultData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tokenId", + "type": "uint256" + } + ], + "name": "getVaultCountByStrategyId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "getVaultDetails", + "outputs": [ + { + "components": [ + { + "internalType": "enum VaultRegistry.VaultState", + "name": "state", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "vaultID", + "type": "uint256" + }, + { + "internalType": "string", + "name": "payloadIpfs", + "type": "string" + }, + { + "internalType": "address", + "name": "vaultAddress", + "type": "address" + }, + { + "internalType": "string", + "name": "beaconName", + "type": "string" + } + ], + "internalType": "struct VaultRegistry.VaultData", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_orchestrator", + "type": "address" + }, + { + "internalType": "address", + "name": "_strategyRegistry", + "type": "address" + }, + { + "internalType": "address", + "name": "_whitelistRegistry", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "name": "interfaceImplementations", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "linkedVaults", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "orchestrator", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "string", + "name": "_ipfsConfigForBeacon", + "type": "string" + } + ], + "name": "registerBeacon", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "strategyRegistry", + "outputs": [ + { + "internalType": "contract IStrategyRegistry", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalVaultCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_newIPFSConfigForBeacon", + "type": "string" + } + ], + "name": "updateBeaconConfig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "beaconName", + "type": "string" + }, + { + "internalType": "bytes4[]", + "name": "selectors", + "type": "bytes4[]" + }, + { + "internalType": "bool[]", + "name": "isImplemented", + "type": "bool[]" + } + ], + "name": "updateInterfaceImplementations", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_vault", + "type": "address" + }, + { + "internalType": "enum VaultRegistry.VaultState", + "name": "_newState", + "type": "uint8" + } + ], + "name": "updateVaultState", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "whitelistRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialLogic", + "type": "address" + }, + { + "internalType": "address", + "name": "initialAdmin", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } +] \ No newline at end of file diff --git a/subgraph-build/WhitelistRegistry/WhitelistRegistry.wasm b/subgraph-build/WhitelistRegistry/WhitelistRegistry.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8235a623b65ec6eba367030680ff7203986baa6f GIT binary patch literal 190630 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.7.0": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + +"@types/node@^10.1.0": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.54": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/normalize-package-data@^2.4.3": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/qs@*": + version "6.9.16" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" + integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/triple-beam@^1.3.2": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.0": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@types/zen-observable@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== + +"@typescript-eslint/eslint-plugin@^5.47.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + graphemer "^1.4.0" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.47.1": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + dependencies: + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@wry/caches@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@wry/caches/-/caches-1.0.1.tgz#8641fd3b6e09230b86ce8b93558d44cf1ece7e52" + integrity sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA== + dependencies: + tslib "^2.3.0" + +"@wry/context@^0.7.0": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.7.4.tgz#e32d750fa075955c4ab2cfb8c48095e1d42d5990" + integrity sha512-jmT7Sb4ZQWI5iyu3lobQxICu2nC/vbUhP0vIdd6tHC9PTfenmRmuIFqktc6GH9cgi+ZHnsLWPvfSvc4DrYmKiQ== + dependencies: + tslib "^2.3.0" + +"@wry/equality@^0.5.6": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.5.7.tgz#72ec1a73760943d439d56b7b1e9985aec5d497bb" + integrity sha512-BRFORjsTuQv5gxcXsuDXx6oGRhuVsEGwZy6LOzRRfgu+eSfxbhUQ9L9YtSEIuIjY/o7g3iWFjrc5eSY1GXP2Dw== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.4.3.tgz#077d52c22365871bf3ffcbab8e95cb8bc5689af4" + integrity sha512-I6bHwH0fSf6RqQcnnXLJKhkSXG45MFral3GxPaY4uAl0LYDZM+YDVDAiU9bYwjTuysy1S0IeecWtmq1SZA3M1w== + dependencies: + tslib "^2.3.0" + +"@wry/trie@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@wry/trie/-/trie-0.5.0.tgz#11e783f3a53f6e4cd1d42d2d1323f5bc3fa99c94" + integrity sha512-FNoYzHawTMk/6KMQoEG5O4PuioX19UbwdQKF44yw0nLfOypfQdjtfZzo/UIJWAJ23sNIFbD1Ug9lbaDGMwbqQA== + dependencies: + tslib "^2.3.0" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abortable-iterator@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/abortable-iterator/-/abortable-iterator-4.0.3.tgz#432570d8256dbad2cef4f129312b651c5ffcdd0f" + integrity sha512-GJ5fyS9O0hK/TMf+weR+WMEwSEBWVuStHqHmUYWbfHPULyVf7QdUnAvh41+1cUWtHVf0Z/qtQynidxz4ZFDPOg== + dependencies: + get-iterator "^2.0.0" + it-stream-types "^1.0.3" + +abortable-iterator@^5.0.0, abortable-iterator@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/abortable-iterator/-/abortable-iterator-5.1.0.tgz#2bdd7e3a1b3fe2e6893f1b60502b0e6a3028a792" + integrity sha512-a3nRG0GOGw3IPFA2hdhrZU+QuD3mA6i+5f4YM/Obe+D5lYccxScI32rAIHAW5ttFV7+beiof09gHav4qUEZDwg== + dependencies: + get-iterator "^2.0.0" + it-stream-types "^2.0.1" + +abstract-level@^1.0.2, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +accepts@^1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +any-signal@^3.0.0, any-signal@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6" + integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg== + +any-signal@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.1.1.tgz#928416c355c66899e6b2a91cad4488f0324bae03" + integrity sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA== + +anymatch@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apollo-datasource@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" + integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-env "^4.2.1" + +apollo-reporting-protobuf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz#6edd31f09d4a3704d9e808d1db30eca2229ded26" + integrity sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog== + dependencies: + "@apollo/protobufjs" "1.2.6" + +apollo-server-core@^3.11.1, apollo-server-core@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.13.0.tgz#ad6601fbb34cc97eedca27a9fb0b5738d11cd27d" + integrity sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + "@apollo/utils.usagereporting" "^1.0.0" + "@apollographql/apollo-tools" "^0.5.3" + "@apollographql/graphql-playground-html" "1.6.29" + "@graphql-tools/mock" "^8.1.2" + "@graphql-tools/schema" "^8.0.0" + "@josephg/resolvable" "^1.0.0" + apollo-datasource "^3.3.2" + apollo-reporting-protobuf "^3.4.0" + apollo-server-env "^4.2.1" + apollo-server-errors "^3.3.1" + apollo-server-plugin-base "^3.7.2" + apollo-server-types "^3.8.0" + async-retry "^1.2.1" + fast-json-stable-stringify "^2.1.0" + graphql-tag "^2.11.0" + loglevel "^1.6.8" + lru-cache "^6.0.0" + node-abort-controller "^3.0.1" + sha.js "^2.4.11" + uuid "^9.0.0" + whatwg-mimetype "^3.0.0" + +apollo-server-env@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-4.2.1.tgz#ea5b1944accdbdba311f179e4dfaeca482c20185" + integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== + dependencies: + node-fetch "^2.6.7" + +apollo-server-errors@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" + integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== + +apollo-server-express@^3.11.1: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.13.0.tgz#0d8d9bbba3b8b8264912d215f63fd44e74d5f42a" + integrity sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g== + dependencies: + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.2" + "@types/cors" "2.8.12" + "@types/express" "4.17.14" + "@types/express-serve-static-core" "4.17.31" + accepts "^1.3.5" + apollo-server-core "^3.13.0" + apollo-server-types "^3.8.0" + body-parser "^1.19.0" + cors "^2.8.5" + parseurl "^1.3.3" + +apollo-server-plugin-base@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz#c19cd137bc4c993ba2490ba2b571b0f3ce60a0cd" + integrity sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw== + dependencies: + apollo-server-types "^3.8.0" + +apollo-server-plugin-response-cache@^3.8.1: + version "3.8.2" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-response-cache/-/apollo-server-plugin-response-cache-3.8.2.tgz#131ce372c3e83d5eaf8c826283c8432fa74b90dd" + integrity sha512-1k9iGgE7QIUvjC9B0A1elGrV5YcZZQFl5wEVOS7URUfEuTr3GsIHBZSFCLAEFNKTQewzS5Spqhv13AmFsOaFmg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-plugin-base "^3.7.2" + apollo-server-types "^3.8.0" + +apollo-server-types@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.8.0.tgz#d976b6967878681f715fe2b9e4dad9ba86b1346f" + integrity sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + apollo-reporting-protobuf "^3.4.0" + apollo-server-env "^4.2.1" + +apollo-type-bigint@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/apollo-type-bigint/-/apollo-type-bigint-0.1.3.tgz#9242115ca909b9467ba5c4bc6493a56a06984c0b" + integrity sha512-nyfwEWRZ+kon3Nnot20DufGm2EHZrkJoryYzw3soD+USdxhkcW434w1c/n+mjMLQDl86Z6EvlkvMX5Lordf2Wg== + +app-root-path@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" + integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +assert@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" + integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== + dependencies: + call-bind "^1.0.2" + is-nan "^1.3.2" + object-is "^1.1.5" + object.assign "^4.1.4" + util "^0.12.5" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +async-mutex@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" + integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== + dependencies: + tslib "^2.4.0" + +async-retry@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asyncify-wasm@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/asyncify-wasm/-/asyncify-wasm-1.2.1.tgz#a15c0480e858619a4f971e44e6fc05c49015d9e8" + integrity sha512-ZS7tZ8H8EVbUxAZnkKHvMt9UkYoALue2jwrVl7cnLByjq+1MRrbq7rL5TS+EHQduwkfXD/cNZNa+I0ZyLEBBRQ== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +benchmark@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ== + dependencies: + lodash "^4.17.4" + platform "^1.3.3" + +bignumber.js@^9.0.0: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +binaryen@101.0.0-nightly.20210723: + version "101.0.0-nightly.20210723" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-101.0.0-nightly.20210723.tgz#b6bb7f3501341727681a03866c0856500eec3740" + integrity sha512-eioJNqhHlkguVSbblHOtLqlhtC882SOEPKmNFZaDuz1hzQjolxZ+eu3/kaS10n3sGPONsIZsO7R9fR00UyhEUA== + +bintrees@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" + integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== + +blob-to-it@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-1.0.4.tgz#f6caf7a4e90b7bb9215fa6a318ed6bd8ad9898cb" + integrity sha512-iCmk0W4NdbrWgRRuxOriU8aM5ijeVLI61Zulsmg/lUHNr7pYjoj+U77opLefNagevtrrbMt3JQ5Qip7ar178kA== + dependencies: + browser-readablestream-to-it "^1.0.3" + +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.3, body-parser@^1.19.0: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + 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.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + +browser-readablestream-to-it@^1.0.0, browser-readablestream-to-it@^1.0.1, browser-readablestream-to-it@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.3.tgz#ac3e406c7ee6cdf0a502dd55db33bab97f7fba76" + integrity sha512-+12sHB+Br8HIh6VAMVEG5r3UXCyESIgDW7kzk3BjIXa43DVqVwL7GC5TW3jeh+72dtcH99pPVpw0X8i0jt+/kw== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +buffer@^6.0.1, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bunyan@^1.8.15: + version "1.8.15" + resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.8.15.tgz#8ce34ca908a17d0776576ca1b2f6cbd916e93b46" + integrity sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig== + optionalDependencies: + dtrace-provider "~0.8" + moment "^2.19.3" + mv "~2" + safe-json-stringify "~1" + +byte-access@^1.0.0, byte-access@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/byte-access/-/byte-access-1.0.1.tgz#84badd99be3671c03f0dd6a039a9c963983724af" + integrity sha512-GKYa+lvxnzhgHWj9X+LCsQ4s2/C5uvib573eAOiQKywXMkzFFErY2+yQdzmdE5iWVpmqecsRx3bOtOY4/1eINw== + dependencies: + uint8arraylist "^2.0.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +canonical-json@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/canonical-json/-/canonical-json-0.0.4.tgz#6579c072c3db5c477ec41dc978fbf2b8f41074a3" + integrity sha512-2sW7x0m/P7dqEnO0O87U7RTVQAaa7MELcd+Jd9FA6CYgYtwJ1TlDWIYMD8nuMkH1KoThsJogqgLyklrt9d/Azw== + +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cborg@^1.5.4, cborg@^1.6.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" + integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== + +chai@^4.3.4: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-color@~0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-0.1.7.tgz#adc3200fa471cc211b0da7f566b71e98b9d67347" + integrity sha512-xNaQxWYgI6DD4xIJLn8GY2zDZVbrN0vsU1fEbDNAHZRyceWhpj7A08mYcG1AY92q1Aw0geYkVfiAcEYIZtuTSg== + dependencies: + es5-ext "0.8.x" + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0, color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +copyfiles@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" + integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== + dependencies: + glob "^7.0.5" + minimatch "^3.0.3" + mkdirp "^1.0.4" + noms "0.0.0" + through2 "^2.0.1" + untildify "^4.0.0" + yargs "^16.1.0" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cron-parser@^4.0.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.9.0.tgz#0340694af3e46a0894978c6f52a6dbb5c0f11ad5" + integrity sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q== + dependencies: + luxon "^3.2.1" + +cross-fetch@^3.1.4, cross-fetch@^3.1.5: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + +dag-jose@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dag-jose/-/dag-jose-1.0.0.tgz#52e42d70cb5bee31ae4e8e3ab860615568d7ad73" + integrity sha512-U0b/YsIPBp6YZNTFrVjwLZAlY3qGRxZTIEcM/CcQmrVrCWq9MWQq9pheXVSPLIhF4SNwzp2SikPva4/BIrJY+g== + dependencies: + "@ipld/dag-cbor" "^6.0.3" + multiformats "^9.0.2" + +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +datastore-core@^8.0.1: + version "8.0.4" + resolved "https://registry.yarnpkg.com/datastore-core/-/datastore-core-8.0.4.tgz#a5951c8e530f0ba11ca44f6bb3ce5d7070a3d44e" + integrity sha512-oBA6a024NFXJOTu+w9nLAimfy4wCYUhdE/5XQGtdKt1BmCVtPYW10GORvVT3pdZBcse6k/mVcBl+hjkXIlm65A== + dependencies: + "@libp2p/logger" "^2.0.0" + err-code "^3.0.1" + interface-datastore "^7.0.0" + it-all "^2.0.0" + it-drain "^2.0.0" + it-filter "^2.0.0" + it-map "^2.0.0" + it-merge "^2.0.0" + it-pipe "^2.0.3" + it-pushable "^3.0.0" + it-take "^2.0.0" + uint8arrays "^4.0.2" + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.3.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + +deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-gateway@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-7.2.2.tgz#85e6d88fde0f58703bab7744ed9d5330fa6b3f6c" + integrity sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg== + dependencies: + execa "^7.1.1" + +deferred-leveldown@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-7.0.0.tgz#39802715fda6ec06d0159a8b28bd1c7e2b1cf0bf" + integrity sha512-QKN8NtuS3BC6m0B8vAnBls44tX1WXAFATUsJlruyAYbZpysWV3siH6o/i3g9DCHauzodksO60bdj5NazNbjCmg== + dependencies: + abstract-leveldown "^7.2.0" + inherits "^2.0.3" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + 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" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +denque@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.1.tgz#07f670e29c9a78f8faecb2566a1e2c11929c5cbf" + integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +difflib@~0.2.1: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-over-http-resolver@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz#194d5e140a42153f55bb79ac5a64dd2768c36af9" + integrity sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA== + dependencies: + debug "^4.3.1" + native-fetch "^3.0.0" + receptacle "^1.3.2" + +dns-over-http-resolver@^2.1.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-2.1.3.tgz#bb7f2e10cc18d960339a6e30e21b8c1d99be7b38" + integrity sha512-zjRYFhq+CsxPAouQWzOsxNMvEN+SHisjzhX8EMxd2Y0EG3thvn6wXQgMJLnTDImkhe4jhLbOQpXtL10nALBOSA== + dependencies: + debug "^4.3.1" + native-fetch "^4.0.2" + receptacle "^1.3.2" + undici "^5.12.0" + +dns-packet@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +dreamopt@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.6.0.tgz#d813ccdac8d39d8ad526775514a13dda664d6b4b" + integrity sha512-KRJa47iBEK0y6ZtgCgy2ykuvMT8c9gj3ua9Dv7vCkclFJJeH2FjhGY2xO5qBoWGahsjCGMlk4Cq9wJYeWxuYhQ== + dependencies: + wordwrap ">=0.0.2" + +dtrace-provider@~0.8: + version "0.8.8" + resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.8.8.tgz#2996d5490c37e1347be263b423ed7b297fb0d97e" + integrity sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg== + dependencies: + nan "^2.14.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-fetch@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" + integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== + dependencies: + encoding "^0.1.13" + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.4: + version "6.5.7" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.7.tgz#8ec4da2cb2939926a1b9a73619d768207e647c8b" + integrity sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding-down@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-7.1.0.tgz#8d55b5a20d50eb6f0edaf7233f6aee0ff562386a" + integrity sha512-ky47X5jP84ryk5EQmvedQzELwVJPjCgXDQZGeb9F6r4PdChByCGHTBrVcF3h8ynKVJ1wVbkxTsDC8zBROPypgQ== + dependencies: + abstract-leveldown "^7.2.0" + inherits "^2.0.3" + level-codec "^10.0.0" + level-errors "^3.0.0" + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== + +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@0.8.x: + version "0.8.2" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.8.2.tgz#aba8d9e1943a895ac96837a62a39b3f55ecd94ab" + integrity sha512-H19ompyhnKiBdjHR1DPHvf5RHgHPmJaY9JNzFGbMbPgdsUkvnUCN1Ke8J4Y0IMyTwFM2M9l4h2GoHwzwpSmXbA== + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +eslint-config-semistandard@^15.0.1: + version "15.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-semistandard/-/eslint-config-semistandard-15.0.1.tgz#a868397af8fb26d1bb6b907aa9d575d385581099" + integrity sha512-sfV+qNBWKOmF0kZJll1VH5XqOAdTmLlhbOl9WKI11d2eMEe+Kicxnpm24PQWHOqAfk5pAWU2An0LjNCXKa4Usg== + +eslint-config-standard@^16.0.3: + version "16.0.3" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516" + integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== + dependencies: + debug "^3.2.7" + +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== + dependencies: + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-import@^2.27.5: + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== + dependencies: + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" + semver "^6.3.1" + string.prototype.trimend "^1.0.8" + tsconfig-paths "^3.15.0" + +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz#c95544416ee4ada26740a30474eefc5402dc671d" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz#a596acc32981627eb36d9d75f9666ac1a4564971" + integrity sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw== + +eslint-plugin-standard@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-5.0.0.tgz#c43f6925d669f177db46f095ea30be95476b1ee4" + integrity sha512-eSIXPc9wBM4BrniMzJRBm2uoVuXz2EPa+NXPk2+itrVt+r5SbKFERx/IgrK/HmfjddyKVz2f+j+7gBRvu19xLg== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.35.0: + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +ethers@^5.1.4, ethers@^5.4.4, ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +event-iterator@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/event-iterator/-/event-iterator-2.0.0.tgz#10f06740cc1e9fd6bc575f334c2bc1ae9d2dbf62" + integrity sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" + integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + +express-end@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/express-end/-/express-end-0.0.8.tgz#0c8fd95428932158f2b4cf91f4045346bf2c5323" + integrity sha512-PPntzICAq006LBpXKBVJtmRUiCRqTMZ+OB8L2RFXgx+OmkMWU66IL4DTEPF/DOcxmsuC7Y0NdbT2R71lb+pBpg== + dependencies: + debug "^2.2.0" + +express-queue@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/express-queue/-/express-queue-0.0.13.tgz#e9800d67749d4dfab7c34223f00595af933ce5df" + integrity sha512-C4OEDasGDqpXLrZICSUxbY47p5c0bKqf/3/3hwauSCmI+jVVxKBWU2w39BuKLP6nF65z87uDFBbJMPAn2ZrG3g== + dependencies: + debug "^4.3.4" + express-end "0.0.8" + mini-queue "0.0.14" + +express@^4.18.2: + version "4.21.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" + 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" + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + +figlet@^1.1.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.8.0.tgz#1b93c4f65f4c1a3b1135221987eee8cf8b9c0ac7" + integrity sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + 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" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.3.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + +follow-redirects@^1.0.0: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +freeport-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/freeport-promise/-/freeport-promise-2.0.0.tgz#11e4f81e24d680b88a20c15b2103551f4b6663d8" + integrity sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-iterator@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" + integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== + +get-iterator@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-2.0.1.tgz#a904829f61bace789e0d64bd1a504c511a015c3f" + integrity sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg== + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + +get-value@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +glob-parent@^5.1.2, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +graphql-request@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-6.1.0.tgz#f4eb2107967af3c7a5907eb3131c671eac89be4f" + integrity sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw== + dependencies: + "@graphql-typed-document-node/core" "^3.2.0" + cross-fetch "^3.1.5" + +graphql-subscriptions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-2.0.0.tgz#11ec181d475852d8aec879183e8e1eb94f2eb79a" + integrity sha512-s6k2b8mmt9gF9pEfkxsaO1lTxaySfKoEJzEfmwguBbQ//Oq23hIXCfR1hm4kdh5hnR20RdwB+s3BCb+0duHSZA== + dependencies: + iterall "^1.3.0" + +graphql-tag@^2.11.0, graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql-ws@^5.11.2: + version "5.16.0" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.16.0.tgz#849efe02f384b4332109329be01d74c345842729" + integrity sha512-Ju2RCU2dQMgSKtArPbEtsK5gNLnsQyTNIo/T7cZNp96niC1x0KdJNZV0TIoilceBPQwfb5itrGl8pkFeOUMl4A== + +graphql@^15.5.0: + version "15.9.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.9.0.tgz#4e8ca830cfd30b03d44d3edd9cac2b0690304b53" + integrity sha512-GCOQdvm7XxV1S4U4CGrsdlEN37245eC8P9zaYCMr6K1BG0IPGy5lUwmJsEOGyl1GD6HXjOtl2keCP9asRBwNvA== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hashlru@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51" + integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== + +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0", heap@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hosted-git-info@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-middleware@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz#915f236d92ae98ef48278a95dedf17e991936ec6" + integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== + +husky@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.1.1, ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +index-to-position@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-0.1.2.tgz#e11bfe995ca4d8eddb1ec43274488f3c201a7f09" + integrity sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +interface-datastore@^6.0.2: + version "6.1.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-6.1.1.tgz#5150a00de2e7513eaadba58bcafd059cb50004c1" + integrity sha512-AmCS+9CT34pp2u0QQVXjKztkuq3y5T+BIciuiHDDtDZucZD8VudosnSdUyXJV6IsRkN5jc4RFDhCk1O6Q3Gxjg== + dependencies: + interface-store "^2.0.2" + nanoid "^3.0.2" + uint8arrays "^3.0.0" + +interface-datastore@^7.0.0, interface-datastore@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-7.0.4.tgz#f09ae4e2896f57f876d5d742a59e982fb3f42891" + integrity sha512-Q8LZS/jfFFHz6XyZazLTAc078SSCoa27ZPBOfobWdpDiFO7FqPA2yskitUJIhaCgxNK8C+/lMBUTBNfVIDvLiw== + dependencies: + interface-store "^3.0.0" + nanoid "^4.0.0" + uint8arrays "^4.0.2" + +interface-datastore@^8.2.0, interface-datastore@^8.3.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.3.1.tgz#c793f990c5cf078a24a8a2ded13f7e2099a2a282" + integrity sha512-3r0ETmHIi6HmvM5sc09QQiCD3gUfwtEM/AAChOyAd/UAKT69uk8LXfTSUBufbUIO/dU65Vj8nb9O6QjwW8vDSQ== + dependencies: + interface-store "^6.0.0" + uint8arrays "^5.1.0" + +interface-store@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-2.0.2.tgz#83175fd2b0c501585ed96db54bb8ba9d55fce34c" + integrity sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg== + +interface-store@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-3.0.4.tgz#670d95ef45f3b7061d154c3cbfaf39a538167ad7" + integrity sha512-OjHUuGXbH4eXSBx1TF1tTySvjLldPLzRSYYXJwrEQI+XfH5JWYZofr0gVMV4F8XTwC+4V7jomDYkvGRmDSRKqQ== + +interface-store@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-6.0.2.tgz#1746a1ee07634f7678b3aa778738b79e3f75c909" + integrity sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA== + +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + +ip-regex@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + +ip-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-5.0.0.tgz#cd313b2ae9c80c07bd3851e12bf4fa4dc5480632" + integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz#d33fa7bac284f4de7af949638c9d68157c6b92e8" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +ipfs-core-types@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.10.3.tgz#89ebe98199d4d829f2b20104bfa3299f808c80fe" + integrity sha512-GNid2lRBjR5qgScCglgk7w9Hk3TZAwPHQXxOLQx72wgyc0jF2U5NXRoKW0GRvX8NPbHmsrFszForIqxd23I1Gw== + dependencies: + "@ipld/dag-pb" "^2.1.3" + interface-datastore "^6.0.2" + ipfs-unixfs "^6.0.3" + multiaddr "^10.0.0" + multiformats "^9.5.1" + +ipfs-core-utils@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.14.3.tgz#d04c631c472507bdefc58d4e8d1d9109efbb411c" + integrity sha512-aBkewVhgAj3NWXPwu6imj0wADGiGVZmJzqKzODOJsibDjkx6FGdMv8kvvqtLnK8LS/dvSk9yk32IDtuDyYoV7Q== + dependencies: + any-signal "^3.0.0" + blob-to-it "^1.0.1" + browser-readablestream-to-it "^1.0.1" + debug "^4.1.1" + err-code "^3.0.1" + ipfs-core-types "^0.10.3" + ipfs-unixfs "^6.0.3" + ipfs-utils "^9.0.6" + it-all "^1.0.4" + it-map "^1.0.4" + it-peekable "^1.0.2" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + multiaddr "^10.0.0" + multiaddr-to-uri "^8.0.0" + multiformats "^9.5.1" + nanoid "^3.1.23" + parse-duration "^1.0.0" + timeout-abort-controller "^3.0.0" + uint8arrays "^3.0.0" + +ipfs-http-client@^56.0.3: + version "56.0.3" + resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-56.0.3.tgz#45bbea55347ef13524769d5919cbed84d9d022d6" + integrity sha512-E3L5ylVl6BjyRUsNehvfuRBYp1hj8vQ8in4zskVPMNzXs6JiCFUbif5a6BtcAlSK4xPQyJCeLNNAWLUeFQTLNA== + dependencies: + "@ipld/dag-cbor" "^7.0.0" + "@ipld/dag-json" "^8.0.1" + "@ipld/dag-pb" "^2.1.3" + any-signal "^3.0.0" + dag-jose "^1.0.0" + debug "^4.1.1" + err-code "^3.0.1" + ipfs-core-types "^0.10.3" + ipfs-core-utils "^0.14.3" + ipfs-utils "^9.0.6" + it-first "^1.0.6" + it-last "^1.0.4" + merge-options "^3.0.4" + multiaddr "^10.0.0" + multiformats "^9.5.1" + parse-duration "^1.0.0" + stream-to-it "^0.2.2" + uint8arrays "^3.0.0" + +ipfs-unixfs@^6.0.3: + version "6.0.9" + resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-6.0.9.tgz#f6613b8e081d83faa43ed96e016a694c615a9374" + integrity sha512-0DQ7p0/9dRB6XCb0mVCTli33GzIzSVx5udpJuVM47tGcD+W+Bl4LsnoLswd3ggNnNEakMv1FdoFITiEnchXDqQ== + dependencies: + err-code "^3.0.1" + protobufjs "^6.10.2" + +ipfs-utils@^9.0.6: + version "9.0.14" + resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-9.0.14.tgz#24f5fda1f4567685eb32bca2543d518f95fd8704" + integrity sha512-zIaiEGX18QATxgaS0/EOQNoo33W0islREABAcxXE8n7y2MGAlB+hdsxXn4J0hGZge8IqVQhW8sWIb+oJz2yEvg== + dependencies: + any-signal "^3.0.0" + browser-readablestream-to-it "^1.0.0" + buffer "^6.0.1" + electron-fetch "^1.7.2" + err-code "^3.0.1" + is-electron "^2.2.0" + iso-url "^1.1.5" + it-all "^1.0.4" + it-glob "^1.0.1" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + nanoid "^3.1.20" + native-fetch "^3.0.0" + node-fetch "^2.6.8" + react-native-fetch-api "^3.0.0" + stream-to-it "^0.2.2" + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== + dependencies: + is-typed-array "^1.1.13" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-electron@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-ip@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-3.1.0.tgz#2ae5ddfafaf05cb8008a62093cf29734f657c5d8" + integrity sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== + dependencies: + ip-regex "^4.0.0" + +is-loopback-addr@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz#70a6668fa3555d47caebdcee045745ab80adf5e4" + integrity sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg== + +is-nan@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d" + integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.13, is-typed-array@^1.1.3: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iso-random-stream@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/iso-random-stream/-/iso-random-stream-2.0.2.tgz#a24f77c34cfdad9d398707d522a6a0cc640ff27d" + integrity sha512-yJvs+Nnelic1L2vH2JzWvvPQFA4r7kSTnpST/+LkAQjSz0hos2oqLD+qIVi9Qk38Hoe7mNDt3j0S27R58MVjLQ== + dependencies: + events "^3.3.0" + readable-stream "^3.4.0" + +iso-url@^1.1.2, iso-url@^1.1.5: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" + integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +it-all@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-1.0.6.tgz#852557355367606295c4c3b7eff0136f07749335" + integrity sha512-3cmCc6Heqe3uWi3CVM/k51fa/XbMFpQVzFoDsV0IZNHSQDyAXl3c4MjHkFX5kF3922OGj7Myv1nSEUgRtcuM1A== + +it-all@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-2.0.1.tgz#45d530ecf6e13fb81d7ba583cdfd55ffdb376b05" + integrity sha512-9UuJcCRZsboz+HBQTNOau80Dw+ryGaHYFP/cPYzFBJBFcfDathMYnhHk4t52en9+fcyDGPTdLB+lFc1wzQIroA== + +it-batched-bytes@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-batched-bytes/-/it-batched-bytes-1.0.1.tgz#a3b12a10db24308c76a1126032af9184afc2dc63" + integrity sha512-ptBiZ0Mh3kJYySpG0pCS7JgvWhaAW1fGfKDVFtNIuNTA+bpSlXINvD5H3b14ZlJbnJFzFzRSCSZ10E1nH4z/WQ== + dependencies: + it-stream-types "^1.0.4" + p-defer "^4.0.0" + uint8arraylist "^2.4.1" + +it-drain@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-drain/-/it-drain-2.0.1.tgz#f50f6ce5cb8592a9d6337c9b5e780348877b152d" + integrity sha512-ESuHV6MLUNxuSy0vGZpKhSRjW0ixczN1FhbVy7eGJHjX6U2qiiXTyMvDc0z/w+nifOOwPyI5DT9Rc3o9IaGqEQ== + +it-filter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/it-filter/-/it-filter-2.0.2.tgz#c849b3de4a12a2de3cc45be734ee55f69a0ed284" + integrity sha512-gocw1F3siqupegsOzZ78rAc9C+sYlQbI2af/TmzgdrR613MyEJHbvfwBf12XRekGG907kqXSOGKPlxzJa6XV1Q== + +it-first@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-1.0.7.tgz#a4bef40da8be21667f7d23e44dae652f5ccd7ab1" + integrity sha512-nvJKZoBpZD/6Rtde6FXqwDqDZGF1sCADmr2Zoc0hZsIvnE449gRFnGctxDf09Bzc/FWnHXAdaHVIetY6lrE0/g== + +it-first@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-2.0.1.tgz#75d66b254c385ae3a1906def060a69006a437cef" + integrity sha512-noC1oEQcWZZMUwq7VWxHNLML43dM+5bviZpfmkxkXlvBe60z7AFRqpZSga9uQBo792jKv9otnn1IjA4zwgNARw== + +it-first@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.6.tgz#f532f0f36fe9bf0c291e0162b9d3375d59fe8f05" + integrity sha512-ExIewyK9kXKNAplg2GMeWfgjUcfC1FnUXz/RPfAvIXby+w7U4b3//5Lic0NV03gXT8O/isj5Nmp6KiY0d45pIQ== + +it-foreach@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/it-foreach/-/it-foreach-1.0.1.tgz#a4dab99c111457d1480bef6c4f9382076d9a6b81" + integrity sha512-eaVFhKxU+uwPs7+DKYxjuL6pj6c50/MBlAH+XPMgPWRRVIChVoyEIsdUQkkC0Ad6oTUmJbKRTnJxEY6o2aIs7A== + +it-glob@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-1.0.2.tgz#bab9b04d6aaac42884502f3a0bfee84c7a29e15e" + integrity sha512-Ch2Dzhw4URfB9L/0ZHyY+uqOnKvBNeS/SMcRiPmJfpHiM0TsUZn+GkpcZxAoF3dJVdPm/PuIk3A4wlV7SUo23Q== + dependencies: + "@types/minimatch" "^3.0.4" + minimatch "^3.0.4" + +it-handshake@^4.1.2, it-handshake@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/it-handshake/-/it-handshake-4.1.3.tgz#4e6650f8eff5cb3686c6861958645289fb3dc32a" + integrity sha512-V6Lt9A9usox9iduOX+edU1Vo94E6v9Lt9dOvg3ubFaw1qf5NCxXLi93Ao4fyCHWDYd8Y+DUhadwNtWVyn7qqLg== + dependencies: + it-pushable "^3.1.0" + it-reader "^6.0.1" + it-stream-types "^2.0.1" + p-defer "^4.0.0" + uint8arraylist "^2.0.0" + +it-last@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-last/-/it-last-1.0.6.tgz#4106232e5905ec11e16de15a0e9f7037eaecfc45" + integrity sha512-aFGeibeiX/lM4bX3JY0OkVCFkAw8+n9lkukkLNivbJRvNz8lI3YXv5xcqhFUV2lDJiraEK3OXRDbGuevnnR67Q== + +it-length-prefixed@^8.0.2, it-length-prefixed@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/it-length-prefixed/-/it-length-prefixed-8.0.4.tgz#80bd356d93d77a8989a71200f8ca0860db040404" + integrity sha512-5OJ1lxH+IaqJB7lxe8IAIwt9UfSfsmjKJoAI/RO9djYoBDt1Jfy9PeVHUmOfqhqyu/4kJvWBFAJUaG1HhLQ12A== + dependencies: + err-code "^3.0.1" + it-stream-types "^1.0.4" + uint8-varint "^1.0.1" + uint8arraylist "^2.0.0" + uint8arrays "^4.0.2" + +it-length-prefixed@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/it-length-prefixed/-/it-length-prefixed-9.1.0.tgz#19d5d336068fdcbbadfafb1eb33331a9370d4cac" + integrity sha512-kx2UTJuy7/lsT3QUzf50NjfxU1Z4P4wlvYp6YnR5Nc61P8XKfy+QtiJi1VLojA+Kea7vMbB4002rIij1Ol9hcw== + dependencies: + it-reader "^6.0.1" + it-stream-types "^2.0.1" + uint8-varint "^2.0.1" + uint8arraylist "^2.0.0" + uint8arrays "^5.0.1" + +it-map@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-1.0.6.tgz#6aa547e363eedcf8d4f69d8484b450bc13c9882c" + integrity sha512-XT4/RM6UHIFG9IobGlQPFQUrlEKkU4eBUFG3qhWhfAdh1JfF2x11ShCrKCdmZ0OiZppPfoLuzcfA4cey6q3UAQ== + +it-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-2.0.1.tgz#d5251fd6b222d6ee39293d406a3f8fce54fb9220" + integrity sha512-a2GcYDHiAh/eSU628xlvB56LA98luXZnniH2GlD0IdBzf15shEq9rBeb0Rg3o1SWtNILUAwqmQxEXcewGCdvmQ== + +it-merge@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-2.0.1.tgz#6137c63f0dbdcb3b8b74ec67549f2b3351c84da8" + integrity sha512-ItoBy3dPlNKnhjHR8e7nfabfZzH4Jy2OMPvayYH3XHy4YNqSVKmWTIxhz7KX4UMBsLChlIJZ+5j6csJgrYGQtw== + dependencies: + it-pushable "^3.1.0" + +it-merge@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/it-merge/-/it-merge-3.0.5.tgz#2b0d1d07c825b9d20c4c2889aab8e07322fd803e" + integrity sha512-2l7+mPf85pyRF5pqi0dKcA54E5Jm/2FyY5GsOaN51Ta0ipC7YZ3szuAsH8wOoB6eKY4XsU4k2X+mzPmFBMayEA== + dependencies: + it-pushable "^3.2.3" + +it-pair@^2.0.2: + version "2.0.6" + resolved "https://registry.yarnpkg.com/it-pair/-/it-pair-2.0.6.tgz#072defa6b96f611af34e0b0c84573107ddb9f28f" + integrity sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g== + dependencies: + it-stream-types "^2.0.1" + p-defer "^4.0.0" + +it-pb-stream@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/it-pb-stream/-/it-pb-stream-3.2.1.tgz#58ad0b1268894d6eb05c17110e22326a33884a46" + integrity sha512-vKE04Zv5MUcwxPNE9bIEfYK3rd/Klj5ORGD1D8Bn5f0mbCLGfouSrqZP1Jntg2osqQg4BN5dKKS2BbfwyGUI3Q== + dependencies: + err-code "^3.0.1" + it-length-prefixed "^9.0.0" + it-pushable "^3.1.2" + it-stream-types "^1.0.4" + protons-runtime "^5.0.0" + uint8-varint "^1.0.6" + uint8arraylist "^2.0.0" + +it-peekable@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-1.0.3.tgz#8ebe933767d9c5aa0ae4ef8e9cb3a47389bced8c" + integrity sha512-5+8zemFS+wSfIkSZyf0Zh5kNN+iGyccN02914BY4w/Dj+uoFEoPSvj5vaWn8pNZJNSxzjW0zHRxC3LUb2KWJTQ== + +it-pipe@^2.0.3, it-pipe@^2.0.4, it-pipe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/it-pipe/-/it-pipe-2.0.5.tgz#9caf7993dcbbc3824bc6ef64ee8b94574f65afa7" + integrity sha512-y85nW1N6zoiTnkidr2EAyC+ZVzc7Mwt2p+xt2a2ooG1ThFakSpNw1Kxm+7F13Aivru96brJhjQVRQNU+w0yozw== + dependencies: + it-merge "^2.0.0" + it-pushable "^3.1.0" + it-stream-types "^1.0.3" + +it-pipe@^3.0.0, it-pipe@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/it-pipe/-/it-pipe-3.0.1.tgz#b25720df82f4c558a8532602b5fbc37bbe4e7ba5" + integrity sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA== + dependencies: + it-merge "^3.0.0" + it-pushable "^3.1.2" + it-stream-types "^2.0.1" + +it-pushable@^3.0.0, it-pushable@^3.1.0, it-pushable@^3.1.2, it-pushable@^3.1.3, it-pushable@^3.2.0, it-pushable@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.3.tgz#e2b80aed90cfbcd54b620c0a0785e546d4e5f334" + integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== + dependencies: + p-defer "^4.0.0" + +it-reader@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/it-reader/-/it-reader-6.0.4.tgz#439cb88225dcd15116be0ffde9e846a928c3871a" + integrity sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg== + dependencies: + it-stream-types "^2.0.1" + uint8arraylist "^2.0.0" + +it-sort@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-sort/-/it-sort-2.0.1.tgz#37af025862f7adb30d7fc1f8520b3cd7ef219ef6" + integrity sha512-9f4jKOTHfxc/FJpg/wwuQ+j+88i+sfNGKsu2HukAKymm71/XDnBFtOAOzaimko3YIhmn/ERwnfEKrsYLykxw9A== + dependencies: + it-all "^2.0.0" + +it-stream-types@^1.0.2, it-stream-types@^1.0.3, it-stream-types@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-1.0.5.tgz#9c72e6adefdea9dac69d0a28fbea783deebd508d" + integrity sha512-I88Ka1nHgfX62e5mi5LLL+oueqz7Ltg0bUdtsUKDe9SoUqbQPf2Mp5kxDTe9pNhHQGs4pvYPAINwuZ1HAt42TA== + +it-stream-types@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-2.0.2.tgz#60bbace90096796b4e6cc3bfab99cf9f2b86c152" + integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== + +it-take@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/it-take/-/it-take-2.0.1.tgz#f9e5ddf0b73a18ba00e62fb532d9d3cde3fe4ce6" + integrity sha512-DL7kpZNjuoeSTnB9dMAJ0Z3m2T29LRRAU+HIgkiQM+1jH3m8l9e/1xpWs8JHTlbKivbqSFrQMTc8KVcaQNmsaA== + +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== + dependencies: + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" + +it-ws@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/it-ws/-/it-ws-5.0.6.tgz#9b69ff2ef9d08fda18ef2db604acf972d0fedded" + integrity sha512-TEEJQaGtkxgP/nGVq8dq48nPT85Afu8kwwvtDFLj4rQLWRhZcb26RWdXLdn9qhXkWPiWbK5H7JWBW1Bebj/SuQ== + dependencies: + event-iterator "^2.0.0" + iso-url "^1.1.2" + it-stream-types "^1.0.2" + uint8arrays "^4.0.2" + ws "^8.4.0" + +iterall@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + +jayson@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.2.tgz#443c26a8658703e0b2e881117b09395d88b6982e" + integrity sha512-5nzMWDHy6f+koZOuYsArh2AXs73NfWYVlFyJJuCedr93GpY+Ku8qq10ropSXVfHK+H0T6paA88ww+/dV+1fBNA== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + uuid "^8.3.2" + ws "^7.5.10" + +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +js-yaml@^4.0.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-diff@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.5.5.tgz#24658ad200dbdd64ae8a56baf4d87b2b33d7196e" + integrity sha512-B2RSfPv8Y5iqm6/9aKC3cOhXPzjYupKDpGuqT5py9NRulL8J0UoB/zKXUo70xBsuxPcIFgtsGgEdXLrNp0GL7w== + dependencies: + cli-color "~0.1.6" + difflib "~0.2.1" + dreamopt "~0.6.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +level-codec@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-10.0.0.tgz#f9e892770532c6cdcc83529546730791b0c62c12" + integrity sha512-QW3VteVNAp6c/LuV6nDjg7XDXx9XHK4abmQarxZmlRSDyXYk20UdaJTSX6yzVvQ4i0JyWSB7jert0DsyD/kk6g== + dependencies: + buffer "^6.0.3" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-errors@^3.0.0, level-errors@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-3.0.1.tgz#4bed48a33108cd83b0e39fdf9bbd84e96fbbef9f" + integrity sha512-tqTL2DxzPDzpwl0iV5+rBCv65HWbHp6eutluHNcVIftKZlQN//b6GEnZDM2CvGZvzGYMwyPtYppYnydBQd2SMQ== + +level-iterator-stream@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-5.0.0.tgz#85b3438e1b4c54ce5aa8c0eb973cfb628117df9e" + integrity sha512-wnb1+o+CVFUDdiSMR/ZymE2prPs3cjVLlXuDeSq9Zb8o032XrabGEXcTCsBxprAtseO3qvFeGzh6406z9sOTRA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + +level-js@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-6.1.0.tgz#982ee9e583fca801aa75689c041995d0e7aab4ef" + integrity sha512-i7mPtkZm68aewfv0FnIUWvFUFfoyzIvVKnUmuQGrelEkP72vSPTaA1SGneWWoCV5KZJG4wlzbJLp1WxVNGuc6A== + dependencies: + abstract-leveldown "^7.2.0" + buffer "^6.0.3" + inherits "^2.0.3" + ltgt "^2.1.2" + run-parallel-limit "^1.1.0" + +level-packager@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-6.0.1.tgz#46b521e63df7f9728543f6792c0a8fe967e679a0" + integrity sha512-8Ezr0XM6hmAwqX9uu8IGzGNkWz/9doyPA8Oo9/D7qcMI6meJC+XhIbNYHukJhIn8OGdlzQs/JPcL9B8lA2F6EQ== + dependencies: + encoding-down "^7.1.0" + levelup "^5.1.1" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-7.0.1.tgz#05121748d95a4ff7355860d56eb5d0aa36faef2a" + integrity sha512-w3E64+ALx2eZf8RV5JL4kIcE0BFAvQscRYd1yU4YVqZN9RGTQxXSvH202xvK15yZwFFxRXe60f13LJjcJ//I4Q== + dependencies: + level-js "^6.1.0" + level-packager "^6.0.1" + leveldown "^6.1.0" + +level@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== + dependencies: + abstract-level "^1.0.4" + browser-level "^1.0.1" + classic-level "^1.2.0" + +leveldown@^6.1.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.1.tgz#0f0e480fa88fd807abf94c33cb7e40966ea4b5ce" + integrity sha512-88c+E+Eizn4CkQOBHwqlCJaTNEjGpaEIikn1S+cINc5E9HEvJ77bqY4JY/HxT5u0caWqsc3P3DcFIKBI1vHt+A== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-5.1.1.tgz#9f99699f414ac084a3f8a28fc262a1f49cd7a52c" + integrity sha512-0mFCcHcEebOwsQuk00WJwjLI6oCjbBuEYdh/RaRqhjnyVlzqf41T1NnDtCedumZ56qyIh8euLFDqV1KfzTAVhg== + dependencies: + catering "^2.0.0" + deferred-leveldown "^7.0.0" + level-errors "^3.0.1" + level-iterator-stream "^5.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +logform@^2.6.0, logform@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.1.tgz#71403a7d8cae04b2b734147963236205db9b3df0" + integrity sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA== + dependencies: + "@colors/colors" "1.6.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + +loglevel@^1.6.8: + version "1.9.2" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" + integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + +longbits@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/longbits/-/longbits-1.1.0.tgz#d6a7b2411dead1cf4b79ee4586816e65c7356ab9" + integrity sha512-22U2exkkYy7sr7nuQJYx2NEZ2kEMsC69+BxM5h8auLvkVIJa+LwAB5mFIExnuW2dFuYXFOWsFMKXjaWiq/htYQ== + dependencies: + byte-access "^1.0.1" + uint8arraylist "^2.0.0" + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +"lru-cache@7.10.1 - 7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4" + integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== + +lru-cache@^10.0.0, lru-cache@^10.0.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +ltgt@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +luxon@^3.2.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.5.0.tgz#6b6f65c5cd1d61d1fd19dbf07ee87a50bf4b8e20" + integrity sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mini-queue@0.0.14: + version "0.0.14" + resolved "https://registry.yarnpkg.com/mini-queue/-/mini-queue-0.0.14.tgz#83d2f3f908e3cac5390bd986d1e6fbbfa0d95b93" + integrity sha512-DNh9Wn8U1jrmn1yVfpviwClyER/Y4ltgGbG+LF/KIdKJ8BEo2Q9jDDPG7tEhz6F/DTZ/ohv5D7AAXFVSFyP05Q== + dependencies: + debug "^3.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mocha@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" + integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +module-error@^1.0.1, module-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +mokka@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/mokka/-/mokka-1.4.2.tgz#b0d7117e216672ff2deda6ef2212bcfa0edb8114" + integrity sha512-Vgki/Fr9fqUMZzChGC1yH64AQg+qkMdZZe3xKrTwYBVGEuq8j2GdnDg8voYXwWl+MLfNzWBnNiejq2xZ8PmojA== + dependencies: + bn.js "^5.2.0" + elliptic "^6.5.4" + +moment@^2.19.3: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mortice@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/mortice/-/mortice-3.0.4.tgz#34aadef768161e9dc49a7f73637b7858bcb7c6fa" + integrity sha512-MUHRCAztSl4v/dAmK8vbYi5u1n9NZtQu4H3FsqS7qgMFQIAFw9lTpHiErd9kJpapqmvEdD1L3dUmiikifAvLsQ== + dependencies: + observable-webworkers "^2.0.1" + p-queue "^8.0.1" + p-timeout "^6.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ms@^3.0.0-canary.1: + version "3.0.0-canary.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-3.0.0-canary.1.tgz#c7b34fbce381492fd0b345d1cf56e14d67b77b80" + integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g== + +multiaddr-to-uri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/multiaddr-to-uri/-/multiaddr-to-uri-8.0.0.tgz#65efe4b1f9de5f6b681aa42ff36a7c8db7625e58" + integrity sha512-dq4p/vsOOUdVEd1J1gl+R2GFrXJQH8yjLtz4hodqdVbieg39LvBOdMQRdQnfbg5LSM/q1BYNVf5CBbwZFFqBgA== + dependencies: + multiaddr "^10.0.0" + +multiaddr@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/multiaddr/-/multiaddr-10.0.1.tgz#0d15848871370860a4d266bb44d93b3dac5d90ef" + integrity sha512-G5upNcGzEGuTHkzxezPrrD6CaIHR9uo+7MwqhNVcXTs33IInon4y7nMiGxl2CY5hG7chvYQUQhz5V52/Qe3cbg== + dependencies: + dns-over-http-resolver "^1.2.3" + err-code "^3.0.1" + is-ip "^3.1.0" + multiformats "^9.4.5" + uint8arrays "^3.0.0" + varint "^6.0.0" + +multiformats@^11.0.0, multiformats@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-11.0.2.tgz#b14735efc42cd8581e73895e66bebb9752151b60" + integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== + +multiformats@^12.0.1: + version "12.1.3" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-12.1.3.tgz#cbf7a9861e11e74f8228b21376088cb43ba8754e" + integrity sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw== + +multiformats@^13.0.0, multiformats@^13.1.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.3.0.tgz#1f5188bc7c4fe08ff829ae1c18dc33409042fb71" + integrity sha512-CBiqvsufgmpo01VT5ze94O+uc+Pbf6f/sThlvWss0sBZmAOu6GQn5usrYV2sf2mr17FWYc0rO8c/CNe2T90QAA== + +multiformats@^9.0.2, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.4.8, multiformats@^9.5.1, multiformats@^9.5.4: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + +mv@~2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.14.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.21.0.tgz#203ab765a02e6676c8cb92e1cad9503e7976d55b" + integrity sha512-MCpOGmdWvAOMi4RWnpxS5G24l7dVMtdSHtV87I3ltjaLdFOTO74HVJ+DfYiAXjxGKsYR/UCmm1rBwhMN7KqS1A== + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +nanoid@^3.0.2, nanoid@^3.1.20, nanoid@^3.1.23: + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + +nanoid@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-4.0.2.tgz#140b3c5003959adbebf521c170f282c5e7f9fb9e" + integrity sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw== + +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +native-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-3.0.0.tgz#06ccdd70e79e171c365c75117959cf4fe14a09bb" + integrity sha512-G3Z7vx0IFb/FQ4JxvtqGABsOTIqRWvgQz6e+erkB+JJD6LrszQtMozEHI4EkmgZQvnGHrpLVzUWk7t4sJCIkVw== + +native-fetch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-4.0.2.tgz#75c8a44c5f3bb021713e5e24f2846750883e49af" + integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +node-abort-controller@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-fetch@^2.6.12, node-fetch@^2.6.7, node-fetch@^2.6.8: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-gyp-build@^4.3.0: + version "4.8.2" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.2.tgz#4f802b71c1ab2ca16af830e6c1ea7dd1ad9496fa" + integrity sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw== + +noms@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.31" + +normalize-package-data@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-6.0.2.tgz#a7bc22167fe24025412bcff0a9651eb768b03506" + integrity sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g== + dependencies: + hosted-git-info "^7.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4, object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + +object.groupby@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" + integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + +object.values@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" + integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +observable-webworkers@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/observable-webworkers/-/observable-webworkers-2.0.1.tgz#7d9086ebc567bd318b46ba0506b10cedf3813878" + integrity sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw== + +omit-deep@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/omit-deep/-/omit-deep-0.3.0.tgz#21c8af3499bcadd29651a232cbcacbc52445ebec" + integrity sha512-Lbl/Ma59sss2b15DpnWnGmECBRL8cRl/PjPbPMVW+Y8zIQzRrwMaI65Oy6HvxyhYeILVKBJb2LWeG81bj5zbMg== + dependencies: + is-plain-object "^2.0.1" + unset-value "^0.1.1" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +optimism@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.18.0.tgz#e7bb38b24715f3fdad8a9a7fc18e999144bbfa63" + integrity sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ== + dependencies: + "@wry/caches" "^1.0.0" + "@wry/context" "^0.7.0" + "@wry/trie" "^0.4.3" + tslib "^2.3.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-defer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.1.tgz#d12c6d41420785ed0d162dbd86b71ba490f7f99e" + integrity sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A== + +p-event@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c" + integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== + dependencies: + p-timeout "^5.0.2" + +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-queue@^7.2.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-7.4.1.tgz#7f86f853048beca8272abdbb7cec1ed2afc0f265" + integrity sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^5.0.2" + +p-queue@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" + integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^6.1.2" + +p-reflect@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-reflect/-/p-reflect-3.1.0.tgz#bba22747439b5fc50a7f626e8e909dc9b888218d" + integrity sha512-3sG3UlpisPSaX+o7u2q01hIQmrpkvdl5GSO1ZwL7pfc5kHB2bPF0eFNCfYTrW1/LTUdgmPwBAvmT0Zr8eSmaAQ== + +p-settle@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/p-settle/-/p-settle-5.1.1.tgz#9300778f896d5c01e4361b8ab45d003548574c3e" + integrity sha512-VLgSBpA71aMncPVP5Es4nhQYxcxN0lit8hGlobJke8YTAhtwdRDu/s4KePP5gCT5LFfZty3qosBFYMgD5rFpCg== + dependencies: + p-limit "^4.0.0" + p-reflect "^3.1.0" + +p-timeout@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" + integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== + +p-timeout@^6.0.0, p-timeout@^6.1.1, p-timeout@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5" + integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parent-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + integrity sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ== + +parse-duration@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-1.1.0.tgz#5192084c5d8f2a3fd676d04a451dbd2e05a1819c" + integrity sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ== + +parse-json@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.1.0.tgz#91cdc7728004e955af9cb734de5684733b24a717" + integrity sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA== + dependencies: + "@babel/code-frame" "^7.22.13" + index-to-position "^0.1.2" + type-fest "^4.7.1" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parseurl@^1.3.3, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-browserify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pg-boss@^6.1.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/pg-boss/-/pg-boss-6.2.2.tgz#b33b6c99e53bcec201cc36bbaac69ebb6c09adf1" + integrity sha512-WA4cHCmN4RTOS7uCrGQ8n+Cc88tsgZXrp4U/iGUehgl2XcawSo2L5rm5bFvqX8YFcmrdsl8sh7ZDeKPWAAvOIQ== + dependencies: + cron-parser "^4.0.0" + delay "^5.0.0" + lodash.debounce "^4.0.8" + p-map "^4.0.0" + pg "^8.5.1" + uuid "^8.3.2" + +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + +pg-connection-string@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.7.0.tgz#f1d3489e427c62ece022dba98d5262efcb168b37" + integrity sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.7.0.tgz#d4d3c7ad640f8c6a2245adc369bafde4ebb8cbec" + integrity sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g== + +pg-protocol@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.7.0.tgz#ec037c87c20515372692edac8b63cf4405448a93" + integrity sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.5.1: + version "8.13.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.13.0.tgz#e3d245342eb0158112553fcc1890a60720ae2a3d" + integrity sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw== + dependencies: + pg-connection-string "^2.7.0" + pg-pool "^3.7.0" + pg-protocol "^1.7.0" + pg-types "^2.1.0" + pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + +picocolors@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +platform@^1.3.3: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +private-ip@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/private-ip/-/private-ip-3.0.2.tgz#1daf6052ee5cee53238616a377d6be180e9490ef" + integrity sha512-2pkOVPGYD/4QyAg95c6E/4bLYXPthT5Xw4ocXYzIIsMBhskOMn6IwkWXmg6ZiA6K58+O6VD/n02r1hDhk7vDPw== + dependencies: + "@chainsafe/is-ip" "^2.0.1" + ip-regex "^5.0.0" + ipaddr.js "^2.1.0" + netmask "^2.0.2" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +progress-events@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/progress-events/-/progress-events-1.0.1.tgz#693b6d4153f08c1418ae3cd5fcad8596c91db7e8" + integrity sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw== + +prom-client@^14.0.1: + version "14.2.0" + resolved "https://registry.yarnpkg.com/prom-client/-/prom-client-14.2.0.tgz#ca94504e64156f6506574c25fb1c34df7812cf11" + integrity sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA== + dependencies: + tdigest "^0.1.1" + +promjs@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/promjs/-/promjs-0.4.2.tgz#9c2b4a60e00c1a0ecb69a3c1c322d1cfb47a300d" + integrity sha512-qvHcTU9xwEieFOf2Qnf5JYPKkdJU2lRbJfJvJspw6XpnoH7VPmNfnJJnOLPfN8ODJMBLRt8wEPVjxyyn0Or6RQ== + +prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +protobufjs@^6.10.2, protobufjs@^6.11.2: + version "6.11.4" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" + integrity sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.1" + "@types/node" ">=13.7.0" + long "^4.0.0" + +protobufjs@^7.0.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" + integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + +protons-runtime@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-4.0.2.tgz#a5670e703a5389dccb3700b583532e3316efcb94" + integrity sha512-R4N6qKHgz8T2Gl45CTcZfITzXPQY9ym8lbLb4VyFMS4ag1KusCRZwkQXTBRhxQ+93ck3K3aDhK1wIk98AMtNyw== + dependencies: + protobufjs "^7.0.0" + uint8arraylist "^2.4.3" + +protons-runtime@^5.0.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.5.0.tgz#ea06d9ef843aad77ea5de3e1ebafa81b58c24570" + integrity sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA== + dependencies: + uint8-varint "^2.0.2" + uint8arraylist "^2.4.3" + uint8arrays "^5.0.1" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +race-signal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/race-signal/-/race-signal-1.1.0.tgz#8bfc0740e7dedb9488f90f98858135c7cfe51bd4" + integrity sha512-VqsW1uzCXfKBd2DhA3K3NhQlqQr04+5WQ7+kHpf1HzT01Q+ePSFWZdQHXKZPuLmm2eXTZM1XLO76cq15ZRAaEA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +rate-limiter-flexible@^2.3.11, rate-limiter-flexible@^2.3.9: + version "2.4.2" + resolved "https://registry.yarnpkg.com/rate-limiter-flexible/-/rate-limiter-flexible-2.4.2.tgz#2a219cc473f015142fd8fb599371223d730decbd" + integrity sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^16.13.1, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-native-fetch-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" + integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== + dependencies: + p-defer "^3.0.0" + +read-pkg@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-9.0.1.tgz#b1b81fb15104f5dbb121b6bbdee9bbc9739f569b" + integrity sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA== + dependencies: + "@types/normalize-package-data" "^2.4.3" + normalize-package-data "^6.0.0" + parse-json "^8.0.0" + type-fest "^4.6.0" + unicorn-magic "^0.1.0" + +readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.5.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +receptacle@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2" + integrity sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A== + dependencies: + ms "^2.1.1" + +reflect-metadata@^0.1.13: + version "0.1.14" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.14.tgz#24cf721fe60677146bb77eeb0e1f9dece3d65859" + integrity sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A== + +regexp.prototype.flags@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" + +regexpp@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +rehackt@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/rehackt/-/rehackt-0.1.0.tgz#a7c5e289c87345f70da8728a7eb878e5d03c696b" + integrity sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.10.1, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +response-iterator@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/response-iterator/-/response-iterator-0.2.6.tgz#249005fb14d2e4eeb478a3f735a28fd8b4c9f3da" + integrity sha512-pVzEEzrsg23Sh053rmDUvLSkGXluZio0qu8VT6ukrYuvtjVfCbDZH9d6PGXb8HZfzdNZt8feXv/jvUzlhRgLnw== + +retimer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" + integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + dependencies: + glob "^6.0.1" + +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-json-stringify@~1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" + integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== + +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + +safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-filename@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +semver@^6.1.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.3.7: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + 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" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +set-delayed-interval@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-delayed-interval/-/set-delayed-interval-1.0.0.tgz#1f7c065780a365f10250f8a80e2be10175ea0388" + integrity sha512-29fhAwuZlLcuBnW/EwxvLcg2D3ELX+VBDNhnavs3YYkab72qmrcSeQNVdzl8EcPPahGQXhBM6MKdPLCQGMDakw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + 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" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + 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" + +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sprintf-js@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stream-to-it@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-0.2.4.tgz#d2fd7bfbd4a899b4c0d6a7e6a533723af5749bd0" + integrity sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ== + dependencies: + get-iterator "^1.0.2" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" + +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-observable@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +tdigest@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tdigest/-/tdigest-0.1.2.tgz#96c64bac4ff10746b910b0e23b515794e12faced" + integrity sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== + dependencies: + bintrees "1.0.2" + +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timeout-abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz#dd57ffca041652c03769904f8d95afd93fb95595" + integrity sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA== + dependencies: + retimer "^3.0.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +triple-beam@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== + dependencies: + utf8-byte-length "^1.0.1" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-invariant@^0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" + integrity sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ== + dependencies: + tslib "^2.1.0" + +ts-node@^10.2.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^4.6.0, type-fest@^4.7.1: + version "4.26.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" + integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + +typeorm-naming-strategies@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/typeorm-naming-strategies/-/typeorm-naming-strategies-2.0.0.tgz#c7c10bc768ddce2592ef9ad4d2dca55fd5fa6ad6" + integrity sha512-nsJ5jDjhBBEG6olFmxojkO4yrW7hEv38sH7ZXWWx9wnDoo9uaoH/mo2mBYAh/VKgwoFHBLu+CYxGmzXz2GUMcA== + +typeorm@0.2.37: + version "0.2.37" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.37.tgz#1a5e59216077640694d27c04c99ed3f968d15dc8" + integrity sha512-7rkW0yCgFC24I5T0f3S/twmLSuccPh1SQmxET/oDWn2sSDVzbyWdnItSdKy27CdJGTlKHYtUVeOcMYw5LRsXVw== + dependencies: + "@sqltools/formatter" "^1.2.2" + app-root-path "^3.0.0" + buffer "^6.0.3" + chalk "^4.1.0" + cli-highlight "^2.1.11" + debug "^4.3.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^4.0.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.1.0" + xml2js "^0.4.23" + yargonaut "^1.1.4" + yargs "^17.0.1" + zen-observable-ts "^1.0.0" + +typescript@^5.0.2: + version "5.6.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" + integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== + +uint8-varint@^1.0.1, uint8-varint@^1.0.2, uint8-varint@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-1.0.8.tgz#3f6c268e4c1a1ece232f660ec37729faca7cc7d0" + integrity sha512-QS03THS87Wlc0fBCC3xP5sqScDwfvVZLUrTCeMAQbQxQUWJosPC7C8uTNhpVUEgpTbV1Ut2Fer9Se3kI1KbnlQ== + dependencies: + byte-access "^1.0.0" + longbits "^1.1.0" + uint8arraylist "^2.0.0" + uint8arrays "^4.0.2" + +uint8-varint@^2.0.1, uint8-varint@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.4.tgz#85be52b3849eb30f2c3640a2df8a14364180affb" + integrity sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw== + dependencies: + uint8arraylist "^2.0.0" + uint8arrays "^5.0.0" + +uint8arraylist@^2.0.0, uint8arraylist@^2.1.0, uint8arraylist@^2.1.1, uint8arraylist@^2.1.2, uint8arraylist@^2.3.1, uint8arraylist@^2.3.2, uint8arraylist@^2.4.1, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== + dependencies: + uint8arrays "^5.0.1" + +uint8arrays@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + +uint8arrays@^4.0.2, uint8arrays@^4.0.3, uint8arrays@^4.0.6: + version "4.0.10" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-4.0.10.tgz#3ec5cde3348903c140e87532fc53f46b8f2e921f" + integrity sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA== + dependencies: + multiformats "^12.0.1" + +uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.1.0.tgz#14047c9bdf825d025b7391299436e5e50e7270f1" + integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== + dependencies: + multiformats "^13.0.0" + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici@^5.12.0: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + +unicorn-magic@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.1.0.tgz#1bb9a51c823aaf9d73a8bfcd3d1a23dde94b0ce4" + integrity sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== + +unique-names-generator@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/unique-names-generator/-/unique-names-generator-4.7.1.tgz#966407b12ba97f618928f77322cfac8c80df5597" + integrity sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unset-value@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-0.1.2.tgz#506810b867f27c2a5a6e9b04833631f6de58d310" + integrity sha512-yhv5I4TsldLdE3UcVQn0hD2T5sNCPv4+qm/CTUpRKIpwthYRIipsAPdsrNpOI79hPQa0rTTeW22Fq6JWRcTgNg== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8-byte-length@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz#f9f63910d15536ee2b2d5dd4665389715eac5c1e" + integrity sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +validate-npm-package-license@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-promise@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" + integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== + +value-or-promise@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" + integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== + +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +weald@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/weald/-/weald-1.0.4.tgz#8858cf9186869deba58357ae10cf26eaada80bb0" + integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ== + dependencies: + ms "^3.0.0-canary.1" + supports-color "^9.4.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +wherearewe@^2.0.0, wherearewe@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wherearewe/-/wherearewe-2.0.1.tgz#37c97a7bf112dca8db34bfefb2f6c997af312bb8" + integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== + dependencies: + is-electron "^2.2.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.2: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + 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" + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +winston-transport@^4.7.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.8.0.tgz#a15080deaeb80338455ac52c863418c74fcf38ea" + integrity sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA== + dependencies: + logform "^2.6.1" + readable-stream "^4.5.2" + triple-beam "^1.3.0" + +winston@^3.13.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.15.0.tgz#4df7b70be091bc1a38a4f45b969fa79589b73ff5" + integrity sha512-RhruH2Cj0bV0WgNL+lOfoUBI4DVfdUNjVnJGVovWZmrcKtrFTTRzgXYK2O9cymSGjrERCtaAeHwMNnUWXlwZow== + dependencies: + "@colors/colors" "^1.6.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.6.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.7.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@>=0.0.2: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +ws@^8.11.0, ws@^8.12.1, ws@^8.4.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xml2js@^0.6.0, xml2js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xsalsa20@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/xsalsa20/-/xsalsa20-1.2.0.tgz#e5a05cb26f8cef723f94a559102ed50c1b44c25c" + integrity sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w== + +xss@^1.0.8: + version "1.0.15" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.15.tgz#96a0e13886f0661063028b410ed1b18670f4e59a" + integrity sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargonaut@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== + dependencies: + chalk "^1.1.1" + figlet "^1.1.1" + parent-require "^1.0.0" + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.0, yargs@^16.1.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== + +zen-observable-ts@^1.0.0, zen-observable-ts@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable-ts@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.2.5.tgz#6c6d9ea3d3a842812c6e9519209365a122ba8b58" + integrity sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg== + dependencies: + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==